< prev index next > src/hotspot/share/classfile/systemDictionary.cpp
Print this page
bool calledholdinglock
= ObjectSynchronizer::current_thread_holds_lock((JavaThread*)THREAD, lockObject);
assert(calledholdinglock,"must hold lock for notify");
assert((lockObject() != _system_loader_lock_obj && !is_parallelCapable(lockObject)), "unexpected double_lock_wait");
ObjectSynchronizer::notifyall(lockObject, THREAD);
+
+ TSAN_ONLY(int tsan_rec = 0;)
+ TSAN_RUNTIME_ONLY(
+ tsan_rec = SharedRuntime::tsan_oop_rec_unlock(THREAD, lockObject());
+ assert(tsan_rec > 0, "tsan: unlocking unlocked mutex");
+ );
intx recursions = ObjectSynchronizer::complete_exit(lockObject, THREAD);
SystemDictionary_lock->wait();
SystemDictionary_lock->unlock();
ObjectSynchronizer::reenter(lockObject, recursions, THREAD);
+ TSAN_RUNTIME_ONLY(SharedRuntime::tsan_oop_rec_lock(THREAD, lockObject(), tsan_rec));
SystemDictionary_lock->lock();
}
// If the class in is in the placeholder table, class loading is in progress
// For cases where the application changes threads to load classes, it
< prev index next >