提交 6de92941 编写于 作者: A anoll

8041468: Field nmethod::_lock_count should be declared volatile

Summary: The jint field nmethod::_lock_count which is used in nmethodLocker::lock_nmethod and nmethodLocker::unlock_nmethod should be declared volatile (see also signature of Atomic::inc)
Reviewed-by: kvn, roland
Contributed-by: NTobias Hartmann <tobias.hartmann@oracle.com>
上级 a3c7d08b
......@@ -2284,13 +2284,13 @@ nmethodLocker::nmethodLocker(address pc) {
void nmethodLocker::lock_nmethod(nmethod* nm, bool zombie_ok) {
if (nm == NULL) return;
Atomic::inc(&nm->_lock_count);
guarantee(zombie_ok || !nm->is_zombie(), "cannot lock a zombie method");
assert(zombie_ok || !nm->is_zombie(), "cannot lock a zombie method");
}
void nmethodLocker::unlock_nmethod(nmethod* nm) {
if (nm == NULL) return;
Atomic::dec(&nm->_lock_count);
guarantee(nm->_lock_count >= 0, "unmatched nmethod lock/unlock");
assert(nm->_lock_count >= 0, "unmatched nmethod lock/unlock");
}
......
......@@ -203,7 +203,7 @@ class nmethod : public CodeBlob {
// and is not made into a zombie. However, once the nmethod is made into
// a zombie, it will be locked one final time if CompiledMethodUnload
// event processing needs to be done.
jint _lock_count;
volatile jint _lock_count;
// not_entrant method removal. Each mark_sweep pass will update
// this mark to current sweep invocation count if it is seen on the
......
......@@ -878,7 +878,7 @@ typedef TwoOopHashtable<Symbol*, mtClass> SymbolTwoOopHashtable;
nonstatic_field(nmethod, _entry_point, address) \
nonstatic_field(nmethod, _verified_entry_point, address) \
nonstatic_field(nmethod, _osr_entry_point, address) \
nonstatic_field(nmethod, _lock_count, jint) \
volatile_nonstatic_field(nmethod, _lock_count, jint) \
nonstatic_field(nmethod, _stack_traversal_mark, long) \
nonstatic_field(nmethod, _compile_id, int) \
nonstatic_field(nmethod, _comp_level, int) \
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册