Details
Description
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.
Attachments
Issue Links
- 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 |