|
9 | 9 | #include <type_traits> |
10 | 10 | #include <utils/Logger.h> |
11 | 11 |
|
12 | | -#define ENABLE_MEMORY_TRACKING 0 |
| 12 | +#define ENABLE_MEMORY_TRACKING 1 |
13 | 13 |
|
14 | 14 | #define USE_TRACKED_SHARED_PTR ENABLE_MEMORY_TRACKING |
15 | 15 | #define USE_TRACKED_DELETE_LATER ENABLE_MEMORY_TRACKING |
@@ -40,7 +40,7 @@ void untrackedDeleteLater(T* ptr) |
40 | 40 | QThread* thread = ptr->thread(); |
41 | 41 | if (thread && thread->isRunning()) |
42 | 42 | { |
43 | | - ptr->deleteLater(); |
| 43 | + QMetaObject::invokeMethod(ptr, "deleteLater", Qt::QueuedConnection); |
44 | 44 | } |
45 | 45 | else |
46 | 46 | { |
@@ -85,19 +85,22 @@ void trackedDeleteLater(T* ptr) |
85 | 85 | QThread* thread = ptr->thread(); |
86 | 86 | if (thread && thread->isRunning()) |
87 | 87 | { |
88 | | - ptr->deleteLater(); |
89 | | - Debug(log, "QObject<%s>::deleteLater() scheduled on thread '%s'", QSTRING_CSTR(typeName), QSTRING_CSTR(thread->objectName())); |
| 88 | + // Schedule deleteLater from the object's thread |
| 89 | + Debug(log, "QObject<%s>::deleteLater() scheduled via invokeMethod on thread '%s'", |
| 90 | + QSTRING_CSTR(typeName), QSTRING_CSTR(thread->objectName())); |
| 91 | + QMetaObject::invokeMethod(ptr, "deleteLater", Qt::QueuedConnection); |
90 | 92 | } |
91 | 93 | else |
92 | 94 | { |
93 | | - delete ptr; |
94 | 95 | Debug(log, "QObject<%s> deleted immediately (thread not running).", QSTRING_CSTR(typeName)); |
| 96 | + delete ptr; |
95 | 97 | } |
96 | 98 | } |
97 | 99 | else |
98 | 100 | { |
99 | | - delete ptr; |
100 | 101 | Debug(log, "Non-QObject<%s> deleted immediately.", QSTRING_CSTR(typeName)); |
| 102 | + delete ptr; |
| 103 | + |
101 | 104 | } |
102 | 105 | } |
103 | 106 |
|
|
0 commit comments