[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: koffice/krita/image
From: Cyrille Berger <cyb () lepi ! org>
Date: 2010-01-31 22:54:03
Message-ID: 1264978443.391071.32522.nullmailer () svn ! kde ! org
[Download RAW message or body]
SVN commit 1083273 by berger:
remove qobject function, add function to dump the current state of the
tracker
M +43 -6 kis_memory_leak_tracker.cpp
M +2 -2 kis_memory_leak_tracker.h
--- trunk/koffice/krita/image/kis_memory_leak_tracker.cpp #1083272:1083273
@@ -73,11 +73,11 @@
QHash<const void*, WhatInfo > whatWhoWhen;
QHash<const QObject*, WhatInfo > whatQObjWhoWhen;
template<typename _T_>
- void dumpReferencedObjectsAndDelete(QHash<const _T_*, WhatInfo >&);
+ void dumpReferencedObjectsAndDelete(QHash<const _T_*, WhatInfo >&, bool \
_delete); };
template<typename _T_>
-void KisMemoryLeakTracker::Private::dumpReferencedObjectsAndDelete(QHash<const _T_*, \
WhatInfo >& map) +void \
KisMemoryLeakTracker::Private::dumpReferencedObjectsAndDelete(QHash<const _T_*, \
WhatInfo >& map, bool _delete) {
for (typename QHash<const _T_*, WhatInfo >::iterator it = map.begin();
it != map.end(); ++it) {
@@ -90,8 +90,10 @@
for (int i = 0; i < info->size; ++i) {
errKrita << strings[i];
}
- delete info;
- it2.value() = 0;
+ if (_delete) {
+ delete info;
+ it2.value() = 0;
+ }
}
errKrita << "=====";
}
@@ -108,8 +110,8 @@
} else {
errKrita << "****************************************";
errKrita << (d->whatQObjWhoWhen.size() + d->whatWhoWhen.size()) << " leaks \
have been detected";
- d->dumpReferencedObjectsAndDelete(d->whatWhoWhen);
- d->dumpReferencedObjectsAndDelete(d->whatQObjWhoWhen);
+ d->dumpReferencedObjectsAndDelete(d->whatWhoWhen, true);
+ d->dumpReferencedObjectsAndDelete(d->whatQObjWhoWhen, true);
errKrita << "****************************************";
}
delete d;
@@ -154,6 +156,33 @@
d->whatQObjWhoWhen.remove(what);
}
}
+
+void KisMemoryLeakTracker::dumpReferences()
+{
+ errKrita << "****************************************";
+ errKrita << (d->whatQObjWhoWhen.size() + d->whatWhoWhen.size()) << " objects are \
currently referenced"; + d->dumpReferencedObjectsAndDelete(d->whatWhoWhen, false);
+ d->dumpReferencedObjectsAndDelete(d->whatQObjWhoWhen, false);
+ errKrita << "****************************************";
+}
+
+void KisMemoryLeakTracker::dumpReferences(const void* what)
+{
+ if (!d->whatWhoWhen.contains(what)) return;
+ WhatInfo& info = d->whatWhoWhen[what];
+ errKrita << "Object " << what << "(" << info.name << ") is still referenced by " \
<< info.infos.size() << " objects:"; + for (QHash<const void*, \
BacktraceInfo*>::iterator it2 = info.infos.begin(); + it2 != \
info.infos.end(); ++it2) { + BacktraceInfo* info = it2.value();
+ char** strings = backtrace_symbols(info->trace, info->size);
+ errKrita << "Referenced by " << it2.key() << " at:";
+ for (int i = 0; i < info->size; ++i) {
+ errKrita << strings[i];
+ }
+ }
+ errKrita << "=====";
+}
+
#else
#error "Hum, no memory leak tracker for your platform"
#endif
@@ -184,4 +213,12 @@
{
}
+void KisMemoryLeakTracker::dumpReferences()
+{
+}
+
+void KisMemoryLeakTracker::dumpReferences(const void* what)
+{
+}
+
#endif
--- trunk/koffice/krita/image/kis_memory_leak_tracker.h #1083272:1083273
@@ -40,8 +40,8 @@
static KisMemoryLeakTracker* instance();
void reference(const void* what, const void* bywho, const char* whatName = 0);
void dereference(const void* what, const void* bywho);
- void reference(const QObject* what, const void* bywho);
- void dereference(const QObject* what, const void* bywho);
+ void dumpReferences();
+ void dumpReferences(const void* what);
public:
template<typename _T_>
void reference(const _T_* what, const void* bywho);
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic