diff options
author | Lars Knoll <lars.knoll@qt.io> | 2019-03-21 13:03:21 +0100 |
---|---|---|
committer | Lars Knoll <lars.knoll@qt.io> | 2019-03-21 21:58:06 +0000 |
commit | 12bc039baa2672c98518277ea146bedec3a92ac0 (patch) | |
tree | 0a0e59a4786f248df96e46e09c833075702ddc79 /src/corelib/kernel/qobject_p.h | |
parent | 3c4721488af0f33515911d07033d3f9981952543 (diff) |
Don't iterate over the connections without holding a lock
When checking whether a slot is connected to a signal, we need to
hold the signalSlotLock to be sure about the answer, or we can
get crashes when a connection gets removed while doing the check.
The check in activate() can handle some uncertainty as it's only
a shortcut to the longer path.
Fixes: QTBUG-74604
Change-Id: I3fc822455fbadc0223ef68632f5fb3df3ff3e86d
Reviewed-by: Aapo Keskimolo <aapo.keskimolo@qt.io>
Diffstat (limited to 'src/corelib/kernel/qobject_p.h')
-rw-r--r-- | src/corelib/kernel/qobject_p.h | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/src/corelib/kernel/qobject_p.h b/src/corelib/kernel/qobject_p.h index 823c7a195a..863689fddd 100644 --- a/src/corelib/kernel/qobject_p.h +++ b/src/corelib/kernel/qobject_p.h @@ -254,6 +254,7 @@ public: int signalIndex(const char *signalName, const QMetaObject **meta = nullptr) const; bool isSignalConnected(uint signalIdx, bool checkDeclarative = true) const; + bool maybeSignalConnected(uint signalIndex) const; inline bool isDeclarativeSignalConnected(uint signalIdx) const; // To allow abitrary objects to call connectNotify()/disconnectNotify() without making |