< prev index next >
src/share/vm/classfile/systemDictionary.cpp
Print this page
*** 496,506 ****
assert_lock_strong(SystemDictionary_lock);
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);
intptr_t recursions = ObjectSynchronizer::complete_exit(lockObject, THREAD);
SystemDictionary_lock->wait();
SystemDictionary_lock->unlock();
ObjectSynchronizer::reenter(lockObject, recursions, THREAD);
--- 496,506 ----
assert_lock_strong(SystemDictionary_lock);
bool calledholdinglock
= ObjectSynchronizer::current_thread_holds_lock((JavaThread*)THREAD, lockObject);
assert(calledholdinglock,"must hold lock for notify");
! assert((!(oopDesc::bs()->write_barrier(lockObject()) == oopDesc::bs()->write_barrier(_system_loader_lock_obj)) && !is_parallelCapable(lockObject)), "unexpected double_lock_wait");
ObjectSynchronizer::notifyall(lockObject, THREAD);
intptr_t recursions = ObjectSynchronizer::complete_exit(lockObject, THREAD);
SystemDictionary_lock->wait();
SystemDictionary_lock->unlock();
ObjectSynchronizer::reenter(lockObject, recursions, THREAD);
*** 1529,1541 ****
return k;
}
Handle SystemDictionary::compute_loader_lock_object(Handle class_loader, TRAPS) {
// If class_loader is NULL we synchronize on _system_loader_lock_obj
if (class_loader.is_null()) {
! return Handle(THREAD, _system_loader_lock_obj);
} else {
! return class_loader;
}
}
// This method is added to check how often we have to wait to grab loader
// lock. The results are being recorded in the performance counters defined in
--- 1529,1541 ----
return k;
}
Handle SystemDictionary::compute_loader_lock_object(Handle class_loader, TRAPS) {
// If class_loader is NULL we synchronize on _system_loader_lock_obj
if (class_loader.is_null()) {
! return Handle(THREAD, oopDesc::bs()->write_barrier(_system_loader_lock_obj));
} else {
! return Handle(THREAD, oopDesc::bs()->write_barrier(class_loader()));
}
}
// This method is added to check how often we have to wait to grab loader
// lock. The results are being recorded in the performance counters defined in
*** 1550,1560 ****
if (ObjectSynchronizer::query_lock_ownership((JavaThread*)THREAD, loader_lock)
== ObjectSynchronizer::owner_other) {
// contention will likely happen, so increment the corresponding
// contention counter.
! if (loader_lock() == _system_loader_lock_obj) {
ClassLoader::sync_systemLoaderLockContentionRate()->inc();
} else {
ClassLoader::sync_nonSystemLoaderLockContentionRate()->inc();
}
}
--- 1550,1560 ----
if (ObjectSynchronizer::query_lock_ownership((JavaThread*)THREAD, loader_lock)
== ObjectSynchronizer::owner_other) {
// contention will likely happen, so increment the corresponding
// contention counter.
! if (oopDesc::bs()->write_barrier(loader_lock()) == oopDesc::bs()->write_barrier(_system_loader_lock_obj)) {
ClassLoader::sync_systemLoaderLockContentionRate()->inc();
} else {
ClassLoader::sync_nonSystemLoaderLockContentionRate()->inc();
}
}
*** 2677,2682 ****
class_loader->klass() : (Klass*)NULL);
event.commit();
}
#endif // INCLUDE_TRACE
}
-
--- 2677,2681 ----
< prev index next >