< 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 >