changeset 61:9722a1848310

Bug 3294: Reference counter should be handled in TClassContainer::allClear() Reviewed-by: ykubota https://github.com/HeapStats/heapstats/pull/78
author Yasumasa Suenaga <yasuenag@gmail.com>
date Mon, 23 Jan 2017 18:50:37 +0900
parents eafa619db958
children 9fb6779d97d1
files agent/ChangeLog agent/src/classContainer.cpp
diffstat 2 files changed, 8 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/agent/ChangeLog	Tue Jan 17 12:08:51 2017 +0900
+++ b/agent/ChangeLog	Mon Jan 23 18:50:37 2017 +0900
@@ -1,3 +1,7 @@
+2017-01-23 Yasumasa Suenaga  <yasuenag@gmail.com>
+
+	* Bug 3294: Reference counter should be handled in TClassContainer::allClear()
+
 2017-01-17 Yasumasa Suenaga  <yasuenag@gmail.com>
 
 	* Bug 3284: HeapStats Agent might crash when object children are scanned
--- a/agent/src/classContainer.cpp	Tue Jan 17 12:08:51 2017 +0900
+++ b/agent/src/classContainer.cpp	Mon Jan 23 18:50:37 2017 +0900
@@ -404,9 +404,12 @@
             cur != classMap->end(); ++cur) {
             TObjectData *pos = (*cur).second;
             
-            if (likely(pos != NULL)) {
+            if (pos != NULL) {
+              atomic_inc(&pos->numRefsFromChildren, -1);
+              if (atomic_get(&pos->numRefsFromChildren) == 0) {
                 free(pos->className);
                 free(pos);
+              }
             }
         }