< prev index next >
src/share/vm/classfile/systemDictionary.cpp
Print this page
*** 494,507 ****
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);
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
--- 494,508 ----
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 saved_recursions, saved_trace_exit_stack;
! ObjectSynchronizer::complete_exit(lockObject, &saved_recursions, &saved_trace_exit_stack, THREAD);
SystemDictionary_lock->wait();
SystemDictionary_lock->unlock();
! ObjectSynchronizer::reenter(lockObject, saved_recursions, saved_trace_exit_stack, THREAD);
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 >