[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