< prev index next >
src/hotspot/share/prims/privilegedStack.cpp
Print this page
*** 25,34 ****
--- 25,35 ----
#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,54 ****
--- 44,65 ----
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 >