changeset 212:67f3ad492a87

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:49:27 +0900
parents 586299f24c30
children c0615b5719f6
files ChangeLog agent/src/heapstats-engines/classContainer.cpp
diffstat 2 files changed, 10 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog	Tue Jan 17 18:32:43 2017 +0900
+++ b/ChangeLog	Mon Jan 23 18:49:27 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/heapstats-engines/classContainer.cpp	Tue Jan 17 18:32:43 2017 +0900
+++ b/agent/src/heapstats-engines/classContainer.cpp	Mon Jan 23 18:49:27 2017 +0900
@@ -373,9 +373,12 @@
          ++cur) {
       TObjectData *pos = (*cur).second;
 
-      if (likely(pos != NULL)) {
-        free(pos->className);
-        free(pos);
+      if (pos != NULL) {
+        atomic_inc(&pos->numRefsFromChildren, -1);
+        if (atomic_get(&pos->numRefsFromChildren) == 0) {
+          free(pos->className);
+          free(pos);
+        }
       }
     }