qt5base-lts/tests/auto
Denis Kormalev f24cc53cc2 Fix for race condition in signal activation
There was a race condition between QObject::disconnect() and
QMetaObject::activate() which can occur if there are multiple
BlockingQueued connections to one signal from different threads and
they connect/disconnect their connections often.

What can happen in this case is:
T1 is in activate() method and T2 is in disconnect() method

T1                          T2
locks sender mutex
selects next connection
unlocks sender mutex
                            locks sender mutex
                            sets isSlotObject to false
creates QMetaCallEvent      derefs connection
posts event

Two things can happen here:
1. Connection can still be valid, but it will have isSlotObject==false
and callFunction will be used instead of slotObj
2. Connection can already be invalid

To fix it mutex unlock should be moved after QMetaCallEvent creation.

Also there is another case, when we don't disconnect but delete the
receiver object. In this case it can already be invalid during
postEvent, so we need to move mutex unlock after postEvent.

Change-Id: I8103798324140ee11de5b4e10906562ba878ff8b
Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
2016-07-29 06:09:22 +00:00
..
android Fix typo in test results report for android 2015-07-28 21:16:19 +00:00
bic/data bic: Add 5.{1,2,3,4}.0 bic data for linux-gcc-amd64 2015-02-14 06:54:20 +00:00
cmake Enable cmake auto tests for -no-gui 2016-03-30 07:16:50 +00:00
compilerwarnings/data Fixed license headers 2015-02-17 18:46:09 +00:00
concurrent Tests: Replace Q[TRY]_VERIFY(v == true|false) by QVERIFY(v)|QVERIFY(!v). 2015-07-27 12:09:19 +00:00
corelib QVector: fix crash on reserve(0) 2016-07-28 13:50:38 +00:00
dbus Fix race condition in tst_QDBusConnection::pendingCallWhenDisconnected 2016-06-06 11:39:53 +00:00
gui Backwards compatibility fix: No default colormap for Mono QImages 2016-07-27 11:46:11 +00:00
guiapplauncher Fix path to examples part of tst_GuiAppLauncher 2015-02-13 07:28:15 +00:00
installed_cmake Add a unit test for testing Qt in its install location. 2013-07-02 23:08:54 +02:00
network Fix tst_QNetworkReply::qtbug45581WrongReplyStatusCode() on Windows 2016-06-30 07:07:11 +00:00
opengl Merge remote-tracking branch 'origin/5.6.1' into 5.6 2016-06-02 06:01:25 +02:00
other Fix for race condition in signal activation 2016-07-29 06:09:22 +00:00
printsupport QMacPrintEngine: Really set the printer resolution 2016-02-25 18:42:47 +00:00
shared Update copyright headers 2015-02-11 06:49:51 +00:00
sql Fix UNSIGNED values in QMYSQL 2016-06-14 11:13:11 +00:00
testlib Testlib: generate_expected_output.py: Run in C locale 2016-07-05 15:00:58 +00:00
tools moc: fix infinite loop over malformed input 2016-07-20 06:56:40 +00:00
widgets Item delegates: show localized detailed tooltips and "What's this?" texts 2016-07-28 23:42:56 +00:00
xml Fix QDomNamedNodeMap::item crash with negative index 2015-10-29 08:05:45 +00:00
auto.pro Enable cmake auto tests for -no-gui 2016-03-30 07:16:50 +00:00
network-settings.h tst_QTcpSocket, tst_QUdpSocket: Improve diagnostics. 2016-05-02 19:20:33 +00:00
qtest-config.h Update copyright headers 2015-02-11 06:49:51 +00:00
test.pl Update copyright headers 2015-02-11 06:49:51 +00:00