Skip to content

Commit d6f4c9f

Browse files
committed
Memory tracker - Fix deleter for non tracking scenario
1 parent e0b712d commit d6f4c9f

File tree

1 file changed

+31
-3
lines changed

1 file changed

+31
-3
lines changed

include/utils/TrackedMemory.h

Lines changed: 31 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,16 +17,42 @@
1717
#if USE_TRACKED_SHARED_PTR
1818
#define MAKE_TRACKED_SHARED(T, ...) makeTrackedShared<T>(__VA_ARGS__)
1919
#else
20-
#define MAKE_TRACKED_SHARED(T, ...) QSharedPointer<T>(new T(__VA_ARGS__), &QObject::deleteLater)
20+
#define MAKE_TRACKED_SHARED(T, ...) QSharedPointer<T>(new T(__VA_ARGS__), &DELETE_LATER_FN(T))
2121
#endif
2222

2323
#if USE_TRACKED_DELETE_LATER
2424
#define DELETE_LATER_FN(T) trackedDeleteLater<T>
2525
#else
26-
#define DELETE_LATER_FN(T) &QObject::deleteLater
26+
#define DELETE_LATER_FN(T) untrackedDeleteLater<T>
27+
2728
#endif
2829

29-
// Deleter function template
30+
// Deleter function templates
31+
32+
template<typename T>
33+
void untrackedDeleteLater(T* ptr)
34+
{
35+
if (!ptr)
36+
return;
37+
38+
if constexpr (std::is_base_of<QObject, T>::value)
39+
{
40+
QThread* thread = ptr->thread();
41+
if (thread && thread->isRunning())
42+
{
43+
ptr->deleteLater();
44+
}
45+
else
46+
{
47+
delete ptr;
48+
}
49+
}
50+
else
51+
{
52+
delete ptr;
53+
}
54+
}
55+
3056
template<typename T>
3157
void trackedDeleteLater(T* ptr)
3258
{
@@ -80,6 +106,8 @@ template<typename T, typename... Args>
80106
QSharedPointer<T> makeTrackedShared(Args&&... args)
81107
{
82108
T* rawPtr = new T(std::forward<Args>(args)...);
109+
if (!rawPtr)
110+
return QSharedPointer<T>();
83111

84112
QString subComponent = "__";
85113
QString typeName;

0 commit comments

Comments
 (0)