--- old/src/hotspot/share/gc/z/zNMethodTable.cpp 2019-02-20 21:53:00.948700641 +0100 +++ new/src/hotspot/share/gc/z/zNMethodTable.cpp 2019-02-20 21:53:00.392691169 +0100 @@ -153,7 +153,6 @@ ZNMethodTableEntry* ZNMethodTable::_table = NULL; size_t ZNMethodTable::_size = 0; -ZLock ZNMethodTable::_iter_lock; ZNMethodTableEntry* ZNMethodTable::_iter_table = NULL; size_t ZNMethodTable::_iter_table_size = 0; ZArray ZNMethodTable::_iter_deferred_deletes; @@ -162,11 +161,12 @@ volatile size_t ZNMethodTable::_claimed = 0; void ZNMethodTable::safe_delete(void* data) { + assert(CodeCache_lock->owned_by_self(), "Lock must be held"); + if (data == NULL) { return; } - ZLocker locker(&_iter_lock); if (_iter_table != NULL) { // Iteration in progress, defer delete _iter_deferred_deletes.add(data); @@ -290,7 +290,8 @@ } void ZNMethodTable::rebuild(size_t new_size) { - ZLocker locker(&_iter_lock); + assert(CodeCache_lock->owned_by_self(), "Lock must be held"); + assert(is_power_of_2(new_size), "Invalid size"); log_debug(gc, nmethod)("Rebuilding NMethod Table: " @@ -475,7 +476,6 @@ void ZNMethodTable::nmethod_entries_do_begin() { MutexLockerEx mu(CodeCache_lock, Mutex::_no_safepoint_check_flag); - ZLocker locker(&_iter_lock); // Prepare iteration _iter_table = _table; @@ -486,7 +486,6 @@ void ZNMethodTable::nmethod_entries_do_end() { MutexLockerEx mu(CodeCache_lock, Mutex::_no_safepoint_check_flag); - ZLocker locker(&_iter_lock); // Finish iteration if (_iter_table != _table) {