From 57318ce8c2f2fbc8cbdf987fc7e2f661c9a2e688 Mon Sep 17 00:00:00 2001 From: Thiago Macieira Date: Sun, 24 Dec 2017 15:37:04 -0200 Subject: 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) --- src/corelib/kernel/qmetaobject.cpp | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'src/corelib/kernel/qmetaobject.cpp') 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; -- cgit v1.2.3