< prev index next >

src/hotspot/share/prims/privilegedStack.cpp

Print this page

        

@@ -25,10 +25,11 @@
 #include "precompiled.hpp"
 #include "memory/allocation.inline.hpp"
 #include "oops/instanceKlass.hpp"
 #include "oops/method.hpp"
 #include "oops/oop.inline.hpp"
+#include "oops/valueKlass.hpp"
 #include "prims/privilegedStack.hpp"
 #include "runtime/vframe.hpp"
 
 void PrivilegedElement::initialize(vframeStream* vfst, oop context, PrivilegedElement* next, TRAPS) {
   Method* method        = vfst->method();

@@ -43,12 +44,22 @@
   assert(oopDesc::is_oop_or_null(protection_domain()), "must be an oop");
 }
 
 void PrivilegedElement::oops_do(OopClosure* f) {
   PrivilegedElement *cur = this;
+  BufferedValuesDealiaser* dealiaser = NULL;
   do {
+    if (!VTBuffer::is_in_vt_buffer(cur->_privileged_context)) {
     f->do_oop((oop*) &cur->_privileged_context);
+    } else {
+      if (dealiaser == NULL) {
+        dealiaser = Thread::current()->buffered_values_dealiaser();
+      }
+      oop value = *(oop*) &cur->_privileged_context;
+      assert(value->is_value(), "Sanity check");
+      dealiaser->oops_do(f, value);
+    }
     cur = cur->_next;
   } while(cur != NULL);
 }
 
 //-------------------------------------------------------------------------------
< prev index next >