Given a multi-threaded environment such that:
a) Multiple threads each create their own instance of a DBus proxy object
b) Those objects share the same underlying QDBusConnection object
Performing a blocking call, in multiple threads simultainiously, via means of QDBusPendingReply::waitForFinished(), eventually causes a crash within libdbus-1, producing the following error:
process 10929: arguments to dbus_pending_call_block() were incorrect, assertion "pending != NULL" failed in file dbus-pending-call.c line 704.
Backtrace:
#2  0x0000003a3c630035 in _dbus_abort () at dbus-sysdeps.c:94
#3  0x0000003a3c6270c5 in _dbus_warn_check_failed (format=
    0x3a3c636290 "arguments to %s() were incorrect, assertion \"%s\" failed in file %s line %d.\nThis is normally a bug in some application using the D-Bus
library.\n") at dbus-internals.c:289
#4  0x000000397182144a in q_dbus_pending_call_block (pending=0x0)
    at /home/thiago/src/qt/qt-4.8/src/dbus/qdbus_symbols_p.h:313
#5  QDBusConnectionPrivate::waitForFinished(QDBusPendingCallPrivate*)
(this=0x621220, pcall=0x7fffcc002fc0)
    at /home/thiago/src/qt/qt-4.8/src/dbus/qdbusintegrator.cpp:1776
A reproducible test case is attached.
- relates to
- 
                    QTBUG-31932 QtDbus: KIO scheduler exit handler crashes VLC -           
- Closed
 
-         
| For Gerrit Dashboard: QTBUG-27809 | ||||||
|---|---|---|---|---|---|---|
| # | Subject | Branch | Project | Status | CR | V | 
| 58219,6 | Fix QDBusConnectionPrivate::waitForFinished() dbus abort. | stable | qt/qtbase | Status: ABANDONED | 0 | 0 | 
| 59298,2 | Fix unprotected access to QDBusPendingCallPrivate::pending. | stable | qt/qtbase | Status: MERGED | +2 | 0 | 
| 59299,3 | Remove QDBusPendingCallPrivate::autoDelete logic. | stable | qt/qtbase | Status: MERGED | +2 | 0 | 
| 59300,5 | Change QDBusPendingCallPrivate to full reference counting for deletion. | stable | qt/qtbase | Status: MERGED | +2 | 0 | 
| 61934,2 | Fix unprotected access to QDBusPendingCallPrivate::pending. | 4.8 | qt/qt | Status: MERGED | +2 | 0 | 
| 61935,2 | Remove QDBusPendingCallPrivate::autoDelete logic. | 4.8 | qt/qt | Status: MERGED | +2 | 0 | 
| 61936,2 | Change QDBusPendingCallPrivate to full reference counting for deletion. | 4.8 | qt/qt | Status: MERGED | +2 | 0 |