diff options
author | Thiago Macieira <thiago.macieira@intel.com> | 2017-12-24 15:37:04 -0200 |
---|---|---|
committer | Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com> | 2018-01-14 22:36:20 +0000 |
commit | 57318ce8c2f2fbc8cbdf987fc7e2f661c9a2e688 (patch) | |
tree | 4bcff6e7c342f4eecfe3e2370aaac3fd1d638f5b /src/corelib/kernel/qmetaobject.cpp | |
parent | ec7652525499e87dfab574f21ff6553d5e8db12e (diff) |
QMetaObject::invokeMethod: don't leak the slot object
QMetaCallEvent references up, so we need to drop by one. In all other
cases, we need to drop the reference to zero and delete.
[ChangeLog][QtCore][QMetaObject] Fixed a memory leak that happened when
the new-style call to invokeMethod() was used.
Task-number: QTBUG-65462
Change-Id: I39332e0a867442d58082fffd15034b99e31c92a1
Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
Diffstat (limited to 'src/corelib/kernel/qmetaobject.cpp')
-rw-r--r-- | src/corelib/kernel/qmetaobject.cpp | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/src/corelib/kernel/qmetaobject.cpp b/src/corelib/kernel/qmetaobject.cpp index f07b463482..5c97bc6851 100644 --- a/src/corelib/kernel/qmetaobject.cpp +++ b/src/corelib/kernel/qmetaobject.cpp @@ -1491,6 +1491,12 @@ bool QMetaObject::invokeMethod(QObject *obj, bool QMetaObject::invokeMethodImpl(QObject *object, QtPrivate::QSlotObjectBase *slot, Qt::ConnectionType type, void *ret) { + struct Holder { + QtPrivate::QSlotObjectBase *obj; + ~Holder() { obj->destroyIfLastRef(); } + } holder = { slot }; + Q_UNUSED(holder); + if (! object) return false; |