8215500: ICRefillVerifierMark does not set the provided verfier as current

Reviewed-by: pliden, thartmann
This commit is contained in:
Erik Österlund 2018-12-20 10:41:45 +01:00
parent 205598c97f
commit 1cc5cf4c02
3 changed files with 14 additions and 13 deletions

View file

@ -53,29 +53,29 @@ ICRefillVerifier::ICRefillVerifier()
_refill_remembered(false) _refill_remembered(false)
{ {
Thread* thread = Thread::current(); Thread* thread = Thread::current();
assert(thread->missed_ic_stub_refill_mark() == NULL, "nesting not supported"); assert(thread->missed_ic_stub_refill_verifier() == NULL, "nesting not supported");
thread->set_missed_ic_stub_refill_mark(this); thread->set_missed_ic_stub_refill_verifier(this);
} }
ICRefillVerifier::~ICRefillVerifier() { ICRefillVerifier::~ICRefillVerifier() {
assert(!_refill_requested || _refill_remembered, assert(!_refill_requested || _refill_remembered,
"Forgot to refill IC stubs after failed IC transition"); "Forgot to refill IC stubs after failed IC transition");
Thread::current()->set_missed_ic_stub_refill_mark(NULL); Thread::current()->set_missed_ic_stub_refill_verifier(NULL);
} }
ICRefillVerifierMark::ICRefillVerifierMark(ICRefillVerifier* verifier) { ICRefillVerifierMark::ICRefillVerifierMark(ICRefillVerifier* verifier) {
Thread* thread = Thread::current(); Thread* thread = Thread::current();
assert(thread->missed_ic_stub_refill_mark() == NULL, "nesting not supported"); assert(thread->missed_ic_stub_refill_verifier() == NULL, "nesting not supported");
thread->set_missed_ic_stub_refill_mark(this); thread->set_missed_ic_stub_refill_verifier(verifier);
} }
ICRefillVerifierMark::~ICRefillVerifierMark() { ICRefillVerifierMark::~ICRefillVerifierMark() {
Thread::current()->set_missed_ic_stub_refill_mark(NULL); Thread::current()->set_missed_ic_stub_refill_verifier(NULL);
} }
static ICRefillVerifier* current_ic_refill_verifier() { static ICRefillVerifier* current_ic_refill_verifier() {
Thread* current = Thread::current(); Thread* current = Thread::current();
ICRefillVerifier* verifier = reinterpret_cast<ICRefillVerifier*>(current->missed_ic_stub_refill_mark()); ICRefillVerifier* verifier = current->missed_ic_stub_refill_verifier();
assert(verifier != NULL, "need a verifier for safety"); assert(verifier != NULL, "need a verifier for safety");
return verifier; return verifier;
} }

View file

@ -231,7 +231,7 @@ Thread::Thread() {
set_active_handles(NULL); set_active_handles(NULL);
set_free_handle_block(NULL); set_free_handle_block(NULL);
set_last_handle_mark(NULL); set_last_handle_mark(NULL);
DEBUG_ONLY(_missed_ic_stub_refill_mark = NULL); DEBUG_ONLY(_missed_ic_stub_refill_verifier = NULL);
// This initial value ==> never claimed. // This initial value ==> never claimed.
_oops_do_parity = 0; _oops_do_parity = 0;

View file

@ -81,6 +81,7 @@ class jvmtiDeferredLocalVariableSet;
class GCTaskQueue; class GCTaskQueue;
class ThreadClosure; class ThreadClosure;
class ICRefillVerifier;
class IdealGraphPrinter; class IdealGraphPrinter;
class Metadata; class Metadata;
@ -329,15 +330,15 @@ class Thread: public ThreadShadow {
private: private:
#ifdef ASSERT #ifdef ASSERT
void* _missed_ic_stub_refill_mark; ICRefillVerifier* _missed_ic_stub_refill_verifier;
public: public:
void* missed_ic_stub_refill_mark() { ICRefillVerifier* missed_ic_stub_refill_verifier() {
return _missed_ic_stub_refill_mark; return _missed_ic_stub_refill_verifier;
} }
void set_missed_ic_stub_refill_mark(void* mark) { void set_missed_ic_stub_refill_verifier(ICRefillVerifier* verifier) {
_missed_ic_stub_refill_mark = mark; _missed_ic_stub_refill_verifier = verifier;
} }
#endif #endif