@@ -633,7 +633,7 @@ void LightweightSynchronizer::enter_for(Handle obj, BasicLock* lock, JavaThread*
633633 } else {
634634 do {
635635 // It is assumed that enter_for must enter on an object without contention.
636- monitor = inflate_and_enter (obj (), lock, ObjectSynchronizer::inflate_cause_monitor_enter, locking_thread, current);
636+ monitor = inflate_and_enter (obj (), ObjectSynchronizer::inflate_cause_monitor_enter, locking_thread, current);
637637 // But there may still be a race with deflation.
638638 } while (monitor == nullptr );
639639 }
@@ -689,7 +689,7 @@ void LightweightSynchronizer::enter(Handle obj, BasicLock* lock, JavaThread* cur
689689 spin_yield.wait ();
690690 }
691691
692- ObjectMonitor* monitor = inflate_and_enter (obj (), lock, ObjectSynchronizer::inflate_cause_monitor_enter, current, current);
692+ ObjectMonitor* monitor = inflate_and_enter (obj (), ObjectSynchronizer::inflate_cause_monitor_enter, current, current);
693693 if (monitor != nullptr ) {
694694 cache_setter.set_monitor (monitor);
695695 return ;
@@ -703,7 +703,7 @@ void LightweightSynchronizer::enter(Handle obj, BasicLock* lock, JavaThread* cur
703703 }
704704}
705705
706- void LightweightSynchronizer::exit (oop object, BasicLock* lock, JavaThread* current) {
706+ void LightweightSynchronizer::exit (oop object, JavaThread* current) {
707707 assert (LockingMode == LM_LIGHTWEIGHT, " must be" );
708708 assert (current == Thread::current (), " must be" );
709709
@@ -738,18 +738,7 @@ void LightweightSynchronizer::exit(oop object, BasicLock* lock, JavaThread* curr
738738
739739 assert (mark.has_monitor (), " must be" );
740740 // The monitor exists
741- ObjectMonitor* monitor;
742- if (UseObjectMonitorTable) {
743- monitor = lock->object_monitor_cache ();
744- if (monitor == nullptr ) {
745- monitor = current->om_get_from_monitor_cache (object);
746- if (monitor == nullptr ) {
747- monitor = get_monitor_from_table (current, object);
748- }
749- }
750- } else {
751- monitor = ObjectSynchronizer::read_monitor (mark);
752- }
741+ ObjectMonitor* monitor = ObjectSynchronizer::read_monitor (current, object, mark);
753742 if (monitor->has_anonymous_owner ()) {
754743 assert (current->lock_stack ().contains (object), " current must have object on its lock stack" );
755744 monitor->set_owner_from_anonymous (current);
@@ -988,7 +977,7 @@ ObjectMonitor* LightweightSynchronizer::inflate_fast_locked_object(oop object, O
988977 return monitor;
989978}
990979
991- ObjectMonitor* LightweightSynchronizer::inflate_and_enter (oop object, BasicLock* lock, ObjectSynchronizer::InflateCause cause, JavaThread* locking_thread, JavaThread* current) {
980+ ObjectMonitor* LightweightSynchronizer::inflate_and_enter (oop object, ObjectSynchronizer::InflateCause cause, JavaThread* locking_thread, JavaThread* current) {
992981 assert (LockingMode == LM_LIGHTWEIGHT, " only used for lightweight" );
993982 VerifyThreadState vts (locking_thread, current);
994983
@@ -1014,20 +1003,18 @@ ObjectMonitor* LightweightSynchronizer::inflate_and_enter(oop object, BasicLock*
10141003
10151004 NoSafepointVerifier nsv;
10161005
1006+ // Lightweight monitors require that hash codes are installed first
1007+ ObjectSynchronizer::FastHashCode (locking_thread, object);
1008+
10171009 // Try to get the monitor from the thread-local cache.
10181010 // There's no need to use the cache if we are locking
10191011 // on behalf of another thread.
10201012 if (current == locking_thread) {
1021- monitor = lock->object_monitor_cache ();
1022- if (monitor == nullptr ) {
1023- monitor = current->om_get_from_monitor_cache (object);
1024- }
1013+ monitor = current->om_get_from_monitor_cache (object);
10251014 }
10261015
10271016 // Get or create the monitor
10281017 if (monitor == nullptr ) {
1029- // Lightweight monitors require that hash codes are installed first
1030- ObjectSynchronizer::FastHashCode (locking_thread, object);
10311018 monitor = get_or_insert_monitor (object, current, cause);
10321019 }
10331020
@@ -1175,6 +1162,9 @@ bool LightweightSynchronizer::quick_enter(oop obj, BasicLock* lock, JavaThread*
11751162 assert (obj != nullptr , " must be" );
11761163 NoSafepointVerifier nsv;
11771164
1165+ // If quick_enter succeeds with entering, the cache should be in a valid initialized state.
1166+ CacheSetter cache_setter (current, lock);
1167+
11781168 LockStack& lock_stack = current->lock_stack ();
11791169 if (lock_stack.is_full ()) {
11801170 // Always go into runtime if the lock stack is full.
@@ -1201,28 +1191,17 @@ bool LightweightSynchronizer::quick_enter(oop obj, BasicLock* lock, JavaThread*
12011191#endif
12021192
12031193 if (mark.has_monitor ()) {
1204- ObjectMonitor* monitor;
1205- if (UseObjectMonitorTable) {
1206- // C2 fast-path may have put the monitor in the cache in the BasicLock.
1207- monitor = lock->object_monitor_cache ();
1208- if (monitor == nullptr ) {
1209- // Otherwise look up the monitor in the thread's OMCache.
1210- monitor = current->om_get_from_monitor_cache (obj);
1211- }
1212- } else {
1213- monitor = ObjectSynchronizer::read_monitor (mark);
1214- }
1194+ ObjectMonitor* const monitor = UseObjectMonitorTable ? current->om_get_from_monitor_cache (obj) :
1195+ ObjectSynchronizer::read_monitor (mark);
12151196
12161197 if (monitor == nullptr ) {
12171198 // Take the slow-path on a cache miss.
12181199 return false ;
12191200 }
12201201
1221- if (UseObjectMonitorTable) {
1222- lock->set_object_monitor_cache (monitor);
1223- }
1224-
1225- if (monitor->spin_enter (current)) {
1202+ if (monitor->try_enter (current)) {
1203+ // ObjectMonitor enter successful.
1204+ cache_setter.set_monitor (monitor);
12261205 return true ;
12271206 }
12281207 }
0 commit comments