< prev index next >

src/hotspot/share/code/nmethod.cpp

Print this page

        

*** 313,323 **** ExceptionCache* ExceptionCache::next() { return Atomic::load(&_next); } void ExceptionCache::set_next(ExceptionCache *ec) { ! Atomic::store(ec, &_next); } //----------------------------------------------------------------------------- --- 313,323 ---- ExceptionCache* ExceptionCache::next() { return Atomic::load(&_next); } void ExceptionCache::set_next(ExceptionCache *ec) { ! Atomic::store(&_next, ec); } //-----------------------------------------------------------------------------
*** 1148,1158 **** signed char old_state = Atomic::load(&_state); if (old_state >= new_state) { // Ensure monotonicity of transitions. return false; } ! if (Atomic::cmpxchg(new_state, &_state, old_state) == old_state) { return true; } } } --- 1148,1158 ---- signed char old_state = Atomic::load(&_state); if (old_state >= new_state) { // Ensure monotonicity of transitions. return false; } ! if (Atomic::cmpxchg(&_state, old_state, new_state) == old_state) { return true; } } }
*** 1847,1857 **** bool nmethod::oops_do_try_claim_weak_request() { assert(SafepointSynchronize::is_at_safepoint(), "only at safepoint"); if ((_oops_do_mark_link == NULL) && ! (Atomic::replace_if_null(mark_link(this, claim_weak_request_tag), &_oops_do_mark_link))) { oops_do_log_change("oops_do, mark weak request"); return true; } return false; } --- 1847,1857 ---- bool nmethod::oops_do_try_claim_weak_request() { assert(SafepointSynchronize::is_at_safepoint(), "only at safepoint"); if ((_oops_do_mark_link == NULL) && ! (Atomic::replace_if_null(&_oops_do_mark_link, mark_link(this, claim_weak_request_tag)))) { oops_do_log_change("oops_do, mark weak request"); return true; } return false; }
*** 1861,1893 **** } nmethod::oops_do_mark_link* nmethod::oops_do_try_claim_strong_done() { assert(SafepointSynchronize::is_at_safepoint(), "only at safepoint"); ! oops_do_mark_link* old_next = Atomic::cmpxchg(mark_link(this, claim_strong_done_tag), &_oops_do_mark_link, mark_link(NULL, claim_weak_request_tag)); if (old_next == NULL) { oops_do_log_change("oops_do, mark strong done"); } return old_next; } nmethod::oops_do_mark_link* nmethod::oops_do_try_add_strong_request(nmethod::oops_do_mark_link* next) { assert(SafepointSynchronize::is_at_safepoint(), "only at safepoint"); assert(next == mark_link(this, claim_weak_request_tag), "Should be claimed as weak"); ! oops_do_mark_link* old_next = Atomic::cmpxchg(mark_link(this, claim_strong_request_tag), &_oops_do_mark_link, next); if (old_next == next) { oops_do_log_change("oops_do, mark strong request"); } return old_next; } bool nmethod::oops_do_try_claim_weak_done_as_strong_done(nmethod::oops_do_mark_link* next) { assert(SafepointSynchronize::is_at_safepoint(), "only at safepoint"); assert(extract_state(next) == claim_weak_done_tag, "Should be claimed as weak done"); ! oops_do_mark_link* old_next = Atomic::cmpxchg(mark_link(extract_nmethod(next), claim_strong_done_tag), &_oops_do_mark_link, next); if (old_next == next) { oops_do_log_change("oops_do, mark weak done -> mark strong done"); return true; } return false; --- 1861,1893 ---- } nmethod::oops_do_mark_link* nmethod::oops_do_try_claim_strong_done() { assert(SafepointSynchronize::is_at_safepoint(), "only at safepoint"); ! oops_do_mark_link* old_next = Atomic::cmpxchg(&_oops_do_mark_link, mark_link(NULL, claim_weak_request_tag), mark_link(this, claim_strong_done_tag)); if (old_next == NULL) { oops_do_log_change("oops_do, mark strong done"); } return old_next; } nmethod::oops_do_mark_link* nmethod::oops_do_try_add_strong_request(nmethod::oops_do_mark_link* next) { assert(SafepointSynchronize::is_at_safepoint(), "only at safepoint"); assert(next == mark_link(this, claim_weak_request_tag), "Should be claimed as weak"); ! oops_do_mark_link* old_next = Atomic::cmpxchg(&_oops_do_mark_link, next, mark_link(this, claim_strong_request_tag)); if (old_next == next) { oops_do_log_change("oops_do, mark strong request"); } return old_next; } bool nmethod::oops_do_try_claim_weak_done_as_strong_done(nmethod::oops_do_mark_link* next) { assert(SafepointSynchronize::is_at_safepoint(), "only at safepoint"); assert(extract_state(next) == claim_weak_done_tag, "Should be claimed as weak done"); ! oops_do_mark_link* old_next = Atomic::cmpxchg(&_oops_do_mark_link, next, mark_link(extract_nmethod(next), claim_strong_done_tag)); if (old_next == next) { oops_do_log_change("oops_do, mark weak done -> mark strong done"); return true; } return false;
*** 1898,1925 **** assert(extract_state(_oops_do_mark_link) == claim_weak_request_tag || extract_state(_oops_do_mark_link) == claim_strong_request_tag, "must be but is nmethod " PTR_FORMAT " %u", p2i(extract_nmethod(_oops_do_mark_link)), extract_state(_oops_do_mark_link)); ! nmethod* old_head = Atomic::xchg(this, &_oops_do_mark_nmethods); // Self-loop if needed. if (old_head == NULL) { old_head = this; } // Try to install end of list and weak done tag. ! if (Atomic::cmpxchg(mark_link(old_head, claim_weak_done_tag), &_oops_do_mark_link, mark_link(this, claim_weak_request_tag)) == mark_link(this, claim_weak_request_tag)) { oops_do_log_change("oops_do, mark weak done"); return NULL; } else { return old_head; } } void nmethod::oops_do_add_to_list_as_strong_done() { assert(SafepointSynchronize::is_at_safepoint(), "only at safepoint"); ! nmethod* old_head = Atomic::xchg(this, &_oops_do_mark_nmethods); // Self-loop if needed. if (old_head == NULL) { old_head = this; } assert(_oops_do_mark_link == mark_link(this, claim_strong_done_tag), "must be but is nmethod " PTR_FORMAT " state %u", --- 1898,1925 ---- assert(extract_state(_oops_do_mark_link) == claim_weak_request_tag || extract_state(_oops_do_mark_link) == claim_strong_request_tag, "must be but is nmethod " PTR_FORMAT " %u", p2i(extract_nmethod(_oops_do_mark_link)), extract_state(_oops_do_mark_link)); ! nmethod* old_head = Atomic::xchg(&_oops_do_mark_nmethods, this); // Self-loop if needed. if (old_head == NULL) { old_head = this; } // Try to install end of list and weak done tag. ! if (Atomic::cmpxchg(&_oops_do_mark_link, mark_link(this, claim_weak_request_tag), mark_link(old_head, claim_weak_done_tag)) == mark_link(this, claim_weak_request_tag)) { oops_do_log_change("oops_do, mark weak done"); return NULL; } else { return old_head; } } void nmethod::oops_do_add_to_list_as_strong_done() { assert(SafepointSynchronize::is_at_safepoint(), "only at safepoint"); ! nmethod* old_head = Atomic::xchg(&_oops_do_mark_nmethods, this); // Self-loop if needed. if (old_head == NULL) { old_head = this; } assert(_oops_do_mark_link == mark_link(this, claim_strong_done_tag), "must be but is nmethod " PTR_FORMAT " state %u",
< prev index next >