--- old/src/hotspot/share/prims/privilegedStack.cpp 2017-10-31 09:39:51.940988766 -0400 +++ new/src/hotspot/share/prims/privilegedStack.cpp 2017-10-31 09:39:51.704987596 -0400 @@ -27,6 +27,7 @@ #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" @@ -45,8 +46,18 @@ void PrivilegedElement::oops_do(OopClosure* f) { PrivilegedElement *cur = this; + BufferedValuesDealiaser* dealiaser = NULL; do { - f->do_oop((oop*) &cur->_privileged_context); + 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); }