a952fd7d5b
The bitmap cache for the first 64 signals being connected was only set when the connection is added. It was never unset when the connection was removed. Internal use of the connectedSignals bitmap is not hurt by it occasionally saying a signal is connected even though it is not, since the purpose of those checks is avoiding expensive operations that are not necessary if nothing is connected to the signal. However, the public API using this cache meant that it also never spotted signals being disconnected. This was not documented. Fix the behavior by only using the cache if it is up to date. If it is not, use a slower path that gives the correct answer. To avoid making disconnections and QObject destructions slower, the cache is only updated to unset disconnected signals when new signal connections are added. No extra work is done in the common case where signals are only removed in the end of the QObject's lifetime. Fixes: QTBUG-32340 Change-Id: Ieb6e498060157153cec60d9c8f1c33056993fda1 Reviewed-by: Ville Voutilainen <ville.voutilainen@qt.io> Reviewed-by: Thiago Macieira <thiago.macieira@intel.com> Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com> Reviewed-by: Jędrzej Nowacki <jedrzej.nowacki@qt.io> |
||
---|---|---|
.. | ||
qcoreapplication | ||
qdeadlinetimer | ||
qelapsedtimer | ||
qeventdispatcher | ||
qeventloop | ||
qmath | ||
qmetaenum | ||
qmetamethod | ||
qmetaobject | ||
qmetaobjectbuilder | ||
qmetaproperty | ||
qmetatype | ||
qmimedata | ||
qobject | ||
qpointer | ||
qsharedmemory | ||
qsignalblocker | ||
qsignalmapper | ||
qsocketnotifier | ||
qsystemsemaphore | ||
qtimer | ||
qtranslator | ||
qvariant | ||
qwineventnotifier | ||
kernel.pro |