diff options
author | Erik Verbruggen <erik.verbruggen@qt.io> | 2018-01-12 12:19:20 +0100 |
---|---|---|
committer | Simon Hausmann <simon.hausmann@qt.io> | 2018-01-16 08:20:22 +0000 |
commit | 99b89d30fa5484c5d1f3cbda828648c28af4fb7d (patch) | |
tree | d5c17800ba3f54f471cae0eb6eca44db21102604 /src/corelib/kernel/qobject.h | |
parent | cb714248a87ddbdb080c11176d7c7693c0a979db (diff) |
Prevent O(n^2) behavior when calling QObject::deleteLater
When a deleteLater event is queued, a check if done if the same event
for the same receiver is queued before by scanning all pending events.
This leads to quadratic behavior, which is quite noticeable. By using
an unused bit in QObjectData, this can be prevented. Now the duplicate
event scanning in QCoreApplication is only done for the quit event.
Task-number: QTBUG-65712
Change-Id: Ie505acbbec802f91ebd0b94ac067e362c2476113
Reviewed-by: Erik Verbruggen <erik.verbruggen@qt.io>
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Diffstat (limited to 'src/corelib/kernel/qobject.h')
-rw-r--r-- | src/corelib/kernel/qobject.h | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/src/corelib/kernel/qobject.h b/src/corelib/kernel/qobject.h index 6941c55896..dea17ed530 100644 --- a/src/corelib/kernel/qobject.h +++ b/src/corelib/kernel/qobject.h @@ -106,7 +106,8 @@ public: uint sendChildEvents : 1; uint receiveChildEvents : 1; uint isWindow : 1; //for QWindow - uint unused : 25; + uint deleteLaterCalled : 1; + uint unused : 24; int postedEvents; QDynamicMetaObjectData *metaObject; QMetaObject *dynamicMetaObject() const; |