diff src/share/vm/services/heapDumper.cpp @ 14479:dcca80b5e7e7

8034867: Object references from expression stack are not visible as roots via jvmti FollowReferences and HeapDump Summary: The heap walking is inconsistent without following references from expression stack, so need to fix it Reviewed-by: coleenp, sspitsyn Contributed-by: axel.siebenborn@sap.com
author sspitsyn
date Sun, 23 Feb 2014 22:36:19 -0800
parents 539144972c1e
children 4ca6dc0799b6
line wrap: on
line diff
--- a/src/share/vm/services/heapDumper.cpp	Sun Feb 23 13:16:03 2014 -0500
+++ b/src/share/vm/services/heapDumper.cpp	Sun Feb 23 22:36:19 2014 -0800
@@ -1604,6 +1604,18 @@
               }
             }
           }
+          StackValueCollection *exprs = jvf->expressions();
+          for(int index = 0; index < exprs->size(); index++) {
+            if (exprs->at(index)->type() == T_OBJECT) {
+               oop o = exprs->obj_at(index)();
+               if (o != NULL) {
+                 writer()->write_u1(HPROF_GC_ROOT_JAVA_FRAME);
+                 writer()->write_objectID(o);
+                 writer()->write_u4(thread_serial_num);
+                 writer()->write_u4((u4) (stack_depth + extra_frames));
+               }
+             }
+          }
         } else {
           // native frame
           if (stack_depth == 0) {