changeset 192:875e77aab468

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 1eda4c84297f
children 21afb593dd95
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
@@ -369,9 +369,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);
+        }
       }
     }