35 #include "oops/markWord.hpp"
36 #include "oops/oop.inline.hpp"
37 #include "oops/oopHandle.inline.hpp"
38 #include "oops/weakHandle.inline.hpp"
39 #include "prims/jvmtiDeferredUpdates.hpp"
40 #include "prims/jvmtiExport.hpp"
41 #include "runtime/atomic.hpp"
42 #include "runtime/globals.hpp"
43 #include "runtime/handles.inline.hpp"
44 #include "runtime/interfaceSupport.inline.hpp"
45 #include "runtime/javaThread.inline.hpp"
46 #include "runtime/mutexLocker.hpp"
47 #include "runtime/objectMonitor.hpp"
48 #include "runtime/objectMonitor.inline.hpp"
49 #include "runtime/orderAccess.hpp"
50 #include "runtime/osThread.hpp"
51 #include "runtime/perfData.hpp"
52 #include "runtime/safefetch.hpp"
53 #include "runtime/safepointMechanism.inline.hpp"
54 #include "runtime/sharedRuntime.hpp"
55 #include "services/threadService.hpp"
56 #include "utilities/dtrace.hpp"
57 #include "utilities/globalDefinitions.hpp"
58 #include "utilities/macros.hpp"
59 #include "utilities/preserveException.hpp"
60 #if INCLUDE_JFR
61 #include "jfr/support/jfrFlush.hpp"
62 #endif
63
64 #ifdef DTRACE_ENABLED
65
66 // Only bother with this argument setup if dtrace is available
67 // TODO-FIXME: probes should not fire when caller is _blocked. assert() accordingly.
68
69
70 #define DTRACE_MONITOR_PROBE_COMMON(obj, thread) \
71 char* bytes = nullptr; \
72 int len = 0; \
73 jlong jtid = SharedRuntime::get_java_tid(thread); \
74 Symbol* klassname = obj->klass()->name(); \
95 #define DTRACE_MONITOR_PROBE(probe, monitor, obj, thread) \
96 { \
97 if (DTraceMonitorProbes) { \
98 DTRACE_MONITOR_PROBE_COMMON(obj, thread); \
99 HOTSPOT_MONITOR_##probe(jtid, \
100 (uintptr_t)(monitor), bytes, len); \
101 } \
102 }
103
104 #else // ndef DTRACE_ENABLED
105
106 #define DTRACE_MONITOR_WAIT_PROBE(obj, thread, millis, mon) {;}
107 #define DTRACE_MONITOR_PROBE(probe, obj, thread, mon) {;}
108
109 #endif // ndef DTRACE_ENABLED
110
111 DEBUG_ONLY(static volatile bool InitDone = false;)
112
113 OopStorage* ObjectMonitor::_oop_storage = nullptr;
114
115 // -----------------------------------------------------------------------------
116 // Theory of operations -- Monitors lists, thread residency, etc:
117 //
118 // * A thread acquires ownership of a monitor by successfully
119 // CAS()ing the _owner field from null to non-null.
120 //
121 // * Invariant: A thread appears on at most one monitor list --
122 // cxq, EntryList or WaitSet -- at any one time.
123 //
124 // * Contending threads "push" themselves onto the cxq with CAS
125 // and then spin/park.
126 //
127 // * After a contending thread eventually acquires the lock it must
128 // dequeue itself from either the EntryList or the cxq.
129 //
130 // * The exiting thread identifies and unparks an "heir presumptive"
131 // tentative successor thread on the EntryList. Critically, the
132 // exiting thread doesn't unlink the successor thread from the EntryList.
133 // After having been unparked, the wakee will recontend for ownership of
134 // the monitor. The successor (wakee) will either acquire the lock or
232 switch (jt->thread_state()) {
233 case _thread_in_vm: // the usual case
234 case _thread_in_Java: // during deopt
235 break;
236 default:
237 fatal("called from an unsafe thread state");
238 }
239 assert(jt->is_active_Java_thread(), "must be active JavaThread");
240 } else {
241 // However, ThreadService::get_current_contended_monitor()
242 // can call here via the VMThread so sanity check it.
243 assert(self->is_VM_thread(), "must be");
244 }
245 #endif // ASSERT
246 }
247
248 ObjectMonitor::ObjectMonitor(oop object) :
249 _header(markWord::zero()),
250 _object(_oop_storage, object),
251 _owner(nullptr),
252 _previous_owner_tid(0),
253 _next_om(nullptr),
254 _recursions(0),
255 _EntryList(nullptr),
256 _cxq(nullptr),
257 _succ(nullptr),
258 _Responsible(nullptr),
259 _SpinDuration(ObjectMonitor::Knob_SpinLimit),
260 _contentions(0),
261 _WaitSet(nullptr),
262 _waiters(0),
263 _WaitSetLock(0)
264 { }
265
266 ObjectMonitor::~ObjectMonitor() {
267 _object.release(_oop_storage);
268 }
269
270 oop ObjectMonitor::object() const {
271 check_object_context();
299
300 // -----------------------------------------------------------------------------
301 // Enter support
302
303 bool ObjectMonitor::enter_for(JavaThread* locking_thread) {
304 // Used by ObjectSynchronizer::enter_for to enter for another thread.
305 // The monitor is private to or already owned by locking_thread which must be suspended.
306 // So this code may only contend with deflation.
307 assert(locking_thread == Thread::current() || locking_thread->is_obj_deopt_suspend(), "must be");
308
309 // Block out deflation as soon as possible.
310 add_to_contentions(1);
311
312 bool success = false;
313 if (!is_being_async_deflated()) {
314 void* prev_owner = try_set_owner_from(nullptr, locking_thread);
315
316 if (prev_owner == nullptr) {
317 assert(_recursions == 0, "invariant");
318 success = true;
319 } else if (prev_owner == locking_thread) {
320 _recursions++;
321 success = true;
322 } else if (prev_owner == DEFLATER_MARKER) {
323 // Racing with deflation.
324 prev_owner = try_set_owner_from(DEFLATER_MARKER, locking_thread);
325 if (prev_owner == DEFLATER_MARKER) {
326 // Cancelled deflation. Increment contentions as part of the deflation protocol.
327 add_to_contentions(1);
328 success = true;
329 } else if (prev_owner == nullptr) {
330 // At this point we cannot race with deflation as we have both incremented
331 // contentions, seen contention > 0 and seen a DEFLATER_MARKER.
332 // success will only be false if this races with something other than
333 // deflation.
334 prev_owner = try_set_owner_from(nullptr, locking_thread);
335 success = prev_owner == nullptr;
336 }
337 } else if (LockingMode == LM_LEGACY && locking_thread->is_lock_owned((address)prev_owner)) {
338 assert(_recursions == 0, "must be");
339 _recursions = 1;
340 set_owner_from_BasicLock(prev_owner, locking_thread);
341 success = true;
342 }
343 assert(success, "Failed to enter_for: locking_thread=" INTPTR_FORMAT
344 ", this=" INTPTR_FORMAT "{owner=" INTPTR_FORMAT "}, observed owner: " INTPTR_FORMAT,
345 p2i(locking_thread), p2i(this), p2i(owner_raw()), p2i(prev_owner));
346 } else {
347 // Async deflation is in progress and our contentions increment
348 // above lost the race to async deflation. Undo the work and
349 // force the caller to retry.
350 const oop l_object = object();
351 if (l_object != nullptr) {
352 // Attempt to restore the header/dmw to the object's header so that
353 // we only retry once if the deflater thread happens to be slow.
354 install_displaced_markword_in_object(l_object);
355 }
356 }
357
358 add_to_contentions(-1);
359
360 assert(!success || owner_raw() == locking_thread, "must be");
361
362 return success;
363 }
364
365 bool ObjectMonitor::enter(JavaThread* current) {
366 assert(current == JavaThread::current(), "must be");
367 // The following code is ordered to check the most common cases first
368 // and to reduce RTS->RTO cache line upgrades on SPARC and IA32 processors.
369
370 void* cur = try_set_owner_from(nullptr, current);
371 if (cur == nullptr) {
372 assert(_recursions == 0, "invariant");
373 return true;
374 }
375
376 if (cur == current) {
377 // TODO-FIXME: check for integer overflow! BUGID 6557169.
378 _recursions++;
379 return true;
380 }
381
382 if (LockingMode != LM_LIGHTWEIGHT && current->is_lock_owned((address)cur)) {
383 assert(_recursions == 0, "internal state error");
384 _recursions = 1;
385 set_owner_from_BasicLock(cur, current); // Convert from BasicLock* to Thread*.
386 return true;
387 }
388
389 // We've encountered genuine contention.
390
391 // Try one round of spinning *before* enqueueing current
392 // and before going through the awkward and expensive state
393 // transitions. The following spin is strictly optional ...
394 // Note that if we acquire the monitor from an initial spin
395 // we forgo posting JVMTI events and firing DTRACE probes.
396 if (TrySpin(current)) {
397 assert(owner_raw() == current, "must be current: owner=" INTPTR_FORMAT, p2i(owner_raw()));
398 assert(_recursions == 0, "must be 0: recursions=" INTX_FORMAT, _recursions);
399 assert(object()->mark() == markWord::encode(this),
400 "object mark must match encoded this: mark=" INTPTR_FORMAT
401 ", encoded this=" INTPTR_FORMAT, object()->mark().value(),
402 markWord::encode(this).value());
403 return true;
404 }
405
406 assert(owner_raw() != current, "invariant");
407 assert(_succ != current, "invariant");
408 assert(!SafepointSynchronize::is_at_safepoint(), "invariant");
409 assert(current->thread_state() != _thread_blocked, "invariant");
410
411 // Keep track of contention for JVM/TI and M&M queries.
412 add_to_contentions(1);
413 if (is_being_async_deflated()) {
414 // Async deflation is in progress and our contentions increment
415 // above lost the race to async deflation. Undo the work and
416 // force the caller to retry.
417 const oop l_object = object();
418 if (l_object != nullptr) {
419 // Attempt to restore the header/dmw to the object's header so that
420 // we only retry once if the deflater thread happens to be slow.
421 install_displaced_markword_in_object(l_object);
422 }
423 add_to_contentions(-1);
424 return false;
425 }
426
434 event.set_address((uintptr_t)this);
435 }
436
437 { // Change java thread status to indicate blocked on monitor enter.
438 JavaThreadBlockedOnMonitorEnterState jtbmes(current, this);
439
440 assert(current->current_pending_monitor() == nullptr, "invariant");
441 current->set_current_pending_monitor(this);
442
443 DTRACE_MONITOR_PROBE(contended__enter, this, object(), current);
444 if (JvmtiExport::should_post_monitor_contended_enter()) {
445 JvmtiExport::post_monitor_contended_enter(current, this);
446
447 // The current thread does not yet own the monitor and does not
448 // yet appear on any queues that would get it made the successor.
449 // This means that the JVMTI_EVENT_MONITOR_CONTENDED_ENTER event
450 // handler cannot accidentally consume an unpark() meant for the
451 // ParkEvent associated with this ObjectMonitor.
452 }
453
454 OSThreadContendState osts(current->osthread());
455
456 assert(current->thread_state() == _thread_in_vm, "invariant");
457
458 for (;;) {
459 ExitOnSuspend eos(this);
460 {
461 ThreadBlockInVMPreprocess<ExitOnSuspend> tbivs(current, eos, true /* allow_suspend */);
462 EnterI(current);
463 current->set_current_pending_monitor(nullptr);
464 // We can go to a safepoint at the end of this block. If we
465 // do a thread dump during that safepoint, then this thread will show
466 // as having "-locked" the monitor, but the OS and java.lang.Thread
467 // states will still report that the thread is blocked trying to
468 // acquire it.
469 // If there is a suspend request, ExitOnSuspend will exit the OM
470 // and set the OM as pending.
471 }
472 if (!eos.exited()) {
473 // ExitOnSuspend did not exit the OM
474 assert(owner_raw() == current, "invariant");
475 break;
476 }
477 }
478
479 // We've just gotten past the enter-check-for-suspend dance and we now own
480 // the monitor free and clear.
481 }
482
483 add_to_contentions(-1);
484 assert(contentions() >= 0, "must not be negative: contentions=%d", contentions());
485
486 // Must either set _recursions = 0 or ASSERT _recursions == 0.
487 assert(_recursions == 0, "invariant");
488 assert(owner_raw() == current, "invariant");
489 assert(_succ != current, "invariant");
490 assert(object()->mark() == markWord::encode(this), "invariant");
491
492 // The thread -- now the owner -- is back in vm mode.
493 // Report the glorious news via TI,DTrace and jvmstat.
494 // The probe effect is non-trivial. All the reportage occurs
495 // while we hold the monitor, increasing the length of the critical
496 // section. Amdahl's parallel speedup law comes vividly into play.
497 //
498 // Another option might be to aggregate the events (thread local or
499 // per-monitor aggregation) and defer reporting until a more opportune
500 // time -- such as next time some thread encounters contention but has
501 // yet to acquire the lock. While spinning that thread could
502 // spinning we could increment JVMStat counters, etc.
503
504 DTRACE_MONITOR_PROBE(contended__entered, this, object(), current);
505 if (JvmtiExport::should_post_monitor_contended_entered()) {
506 JvmtiExport::post_monitor_contended_entered(current, this);
507
508 // The current thread already owns the monitor and is not going to
543 // makes contentions negative as signals to contending threads that
544 // an async deflation is in progress. There are a number of checks
545 // as part of the protocol to make sure that the calling thread has
546 // not lost the race to a contending thread.
547 //
548 // The ObjectMonitor has been successfully async deflated when:
549 // (contentions < 0)
550 // Contending threads that see that condition know to retry their operation.
551 //
552 bool ObjectMonitor::deflate_monitor() {
553 if (is_busy()) {
554 // Easy checks are first - the ObjectMonitor is busy so no deflation.
555 return false;
556 }
557
558 const oop obj = object_peek();
559
560 if (obj == nullptr) {
561 // If the object died, we can recycle the monitor without racing with
562 // Java threads. The GC already broke the association with the object.
563 set_owner_from(nullptr, DEFLATER_MARKER);
564 assert(contentions() >= 0, "must be non-negative: contentions=%d", contentions());
565 _contentions = INT_MIN; // minimum negative int
566 } else {
567 // Attempt async deflation protocol.
568
569 // Set a null owner to DEFLATER_MARKER to force any contending thread
570 // through the slow path. This is just the first part of the async
571 // deflation dance.
572 if (try_set_owner_from(nullptr, DEFLATER_MARKER) != nullptr) {
573 // The owner field is no longer null so we lost the race since the
574 // ObjectMonitor is now busy.
575 return false;
576 }
577
578 if (contentions() > 0 || _waiters != 0) {
579 // Another thread has raced to enter the ObjectMonitor after
580 // is_busy() above or has already entered and waited on
581 // it which makes it busy so no deflation. Restore owner to
582 // null if it is still DEFLATER_MARKER.
583 if (try_set_owner_from(DEFLATER_MARKER, nullptr) != DEFLATER_MARKER) {
584 // Deferred decrement for the JT EnterI() that cancelled the async deflation.
585 add_to_contentions(-1);
586 }
587 return false;
588 }
589
590 // Make a zero contentions field negative to force any contending threads
591 // to retry. This is the second part of the async deflation dance.
592 if (Atomic::cmpxchg(&_contentions, 0, INT_MIN) != 0) {
593 // Contentions was no longer 0 so we lost the race since the
594 // ObjectMonitor is now busy. Restore owner to null if it is
595 // still DEFLATER_MARKER:
596 if (try_set_owner_from(DEFLATER_MARKER, nullptr) != DEFLATER_MARKER) {
597 // Deferred decrement for the JT EnterI() that cancelled the async deflation.
598 add_to_contentions(-1);
599 }
600 return false;
601 }
602 }
603
604 // Sanity checks for the races:
605 guarantee(owner_is_DEFLATER_MARKER(), "must be deflater marker");
606 guarantee(contentions() < 0, "must be negative: contentions=%d",
607 contentions());
608 guarantee(_waiters == 0, "must be 0: waiters=%d", _waiters);
609 guarantee(_cxq == nullptr, "must be no contending threads: cxq="
610 INTPTR_FORMAT, p2i(_cxq));
611 guarantee(_EntryList == nullptr,
612 "must be no entering threads: EntryList=" INTPTR_FORMAT,
613 p2i(_EntryList));
614
615 if (obj != nullptr) {
616 if (log_is_enabled(Trace, monitorinflation)) {
672 log_info(monitorinflation)("install_displaced_markword_in_object: "
673 "failed cas_set_mark: new_mark=" INTPTR_FORMAT
674 ", old_mark=" INTPTR_FORMAT ", res=" INTPTR_FORMAT,
675 dmw.value(), markWord::encode(this).value(),
676 res.value());
677 }
678
679 // Note: It does not matter which thread restored the header/dmw
680 // into the object's header. The thread deflating the monitor just
681 // wanted the object's header restored and it is. The threads that
682 // detected a race with the deflation process also wanted the
683 // object's header restored before they retry their operation and
684 // because it is restored they will only retry once.
685 }
686
687 // Convert the fields used by is_busy() to a string that can be
688 // used for diagnostic output.
689 const char* ObjectMonitor::is_busy_to_string(stringStream* ss) {
690 ss->print("is_busy: waiters=%d"
691 ", contentions=%d"
692 ", owner=" PTR_FORMAT
693 ", cxq=" PTR_FORMAT
694 ", EntryList=" PTR_FORMAT,
695 _waiters,
696 (contentions() > 0 ? contentions() : 0),
697 owner_is_DEFLATER_MARKER()
698 // We report null instead of DEFLATER_MARKER here because is_busy()
699 // ignores DEFLATER_MARKER values.
700 ? p2i(nullptr)
701 : p2i(owner_raw()),
702 p2i(_cxq),
703 p2i(_EntryList));
704 return ss->base();
705 }
706
707 #define MAX_RECHECK_INTERVAL 1000
708
709 void ObjectMonitor::EnterI(JavaThread* current) {
710 assert(current->thread_state() == _thread_blocked, "invariant");
711
712 // Try the lock - TATAS
713 if (TryLock(current) == TryLockResult::Success) {
714 assert(_succ != current, "invariant");
715 assert(owner_raw() == current, "invariant");
716 assert(_Responsible != current, "invariant");
717 return;
718 }
719
720 if (try_set_owner_from(DEFLATER_MARKER, current) == DEFLATER_MARKER) {
721 // Cancelled the in-progress async deflation by changing owner from
722 // DEFLATER_MARKER to current. As part of the contended enter protocol,
723 // contentions was incremented to a positive value before EnterI()
724 // was called and that prevents the deflater thread from winning the
725 // last part of the 2-part async deflation protocol. After EnterI()
726 // returns to enter(), contentions is decremented because the caller
727 // now owns the monitor. We bump contentions an extra time here to
728 // prevent the deflater thread from winning the last part of the
729 // 2-part async deflation protocol after the regular decrement
730 // occurs in enter(). The deflater thread will decrement contentions
731 // after it recognizes that the async deflation was cancelled.
732 add_to_contentions(1);
733 assert(_succ != current, "invariant");
734 assert(_Responsible != current, "invariant");
735 return;
736 }
737
738 assert(InitDone, "Unexpectedly not initialized");
739
740 // We try one round of spinning *before* enqueueing current.
741 //
742 // If the _owner is ready but OFFPROC we could use a YieldTo()
743 // operation to donate the remainder of this thread's quantum
744 // to the owner. This has subtle but beneficial affinity
745 // effects.
746
747 if (TrySpin(current)) {
748 assert(owner_raw() == current, "invariant");
749 assert(_succ != current, "invariant");
750 assert(_Responsible != current, "invariant");
751 return;
752 }
753
754 // The Spin failed -- Enqueue and park the thread ...
755 assert(_succ != current, "invariant");
756 assert(owner_raw() != current, "invariant");
757 assert(_Responsible != current, "invariant");
758
759 // Enqueue "current" on ObjectMonitor's _cxq.
760 //
761 // Node acts as a proxy for current.
762 // As an aside, if were to ever rewrite the synchronization code mostly
763 // in Java, WaitNodes, ObjectMonitors, and Events would become 1st-class
764 // Java objects. This would avoid awkward lifecycle and liveness issues,
765 // as well as eliminate a subset of ABA issues.
766 // TODO: eliminate ObjectWaiter and enqueue either Threads or Events.
767
768 ObjectWaiter node(current);
769 current->_ParkEvent->reset();
770 node._prev = (ObjectWaiter*) 0xBAD;
771 node.TState = ObjectWaiter::TS_CXQ;
772
773 // Push "current" onto the front of the _cxq.
774 // Once on cxq/EntryList, current stays on-queue until it acquires the lock.
775 // Note that spinning tends to reduce the rate at which threads
776 // enqueue and dequeue on EntryList|cxq.
777 ObjectWaiter* nxt;
778 for (;;) {
779 node._next = nxt = _cxq;
780 if (Atomic::cmpxchg(&_cxq, nxt, &node) == nxt) break;
781
782 // Interference - the CAS failed because _cxq changed. Just retry.
783 // As an optional optimization we retry the lock.
784 if (TryLock(current) == TryLockResult::Success) {
785 assert(_succ != current, "invariant");
786 assert(owner_raw() == current, "invariant");
787 assert(_Responsible != current, "invariant");
788 return;
789 }
790 }
791
792 // Check for cxq|EntryList edge transition to non-null. This indicates
793 // the onset of contention. While contention persists exiting threads
794 // will use a ST:MEMBAR:LD 1-1 exit protocol. When contention abates exit
795 // operations revert to the faster 1-0 mode. This enter operation may interleave
796 // (race) a concurrent 1-0 exit operation, resulting in stranding, so we
797 // arrange for one of the contending thread to use a timed park() operations
798 // to detect and recover from the race. (Stranding is form of progress failure
799 // where the monitor is unlocked but all the contending threads remain parked).
800 // That is, at least one of the contended threads will periodically poll _owner.
801 // One of the contending threads will become the designated "Responsible" thread.
802 // The Responsible thread uses a timed park instead of a normal indefinite park
803 // operation -- it periodically wakes and checks for and recovers from potential
804 // strandings admitted by 1-0 exit operations. We need at most one Responsible
805 // thread per-monitor at any given moment. Only threads on cxq|EntryList may
806 // be responsible for a monitor.
813 // -- the checker -- parked on a timer.
814
815 if (nxt == nullptr && _EntryList == nullptr) {
816 // Try to assume the role of responsible thread for the monitor.
817 // CONSIDER: ST vs CAS vs { if (Responsible==null) Responsible=current }
818 Atomic::replace_if_null(&_Responsible, current);
819 }
820
821 // The lock might have been released while this thread was occupied queueing
822 // itself onto _cxq. To close the race and avoid "stranding" and
823 // progress-liveness failure we must resample-retry _owner before parking.
824 // Note the Dekker/Lamport duality: ST cxq; MEMBAR; LD Owner.
825 // In this case the ST-MEMBAR is accomplished with CAS().
826 //
827 // TODO: Defer all thread state transitions until park-time.
828 // Since state transitions are heavy and inefficient we'd like
829 // to defer the state transitions until absolutely necessary,
830 // and in doing so avoid some transitions ...
831
832 int recheckInterval = 1;
833
834 for (;;) {
835
836 if (TryLock(current) == TryLockResult::Success) {
837 break;
838 }
839 assert(owner_raw() != current, "invariant");
840
841 // park self
842 if (_Responsible == current) {
843 current->_ParkEvent->park((jlong) recheckInterval);
844 // Increase the recheckInterval, but clamp the value.
845 recheckInterval *= 8;
846 if (recheckInterval > MAX_RECHECK_INTERVAL) {
847 recheckInterval = MAX_RECHECK_INTERVAL;
848 }
849 } else {
850 current->_ParkEvent->park();
851 }
852
853 if (TryLock(current) == TryLockResult::Success) {
854 break;
855 }
856
857 if (try_set_owner_from(DEFLATER_MARKER, current) == DEFLATER_MARKER) {
858 // Cancelled the in-progress async deflation by changing owner from
859 // DEFLATER_MARKER to current. As part of the contended enter protocol,
860 // contentions was incremented to a positive value before EnterI()
861 // was called and that prevents the deflater thread from winning the
862 // last part of the 2-part async deflation protocol. After EnterI()
891 // We can find that we were unpark()ed and redesignated _succ while
892 // we were spinning. That's harmless. If we iterate and call park(),
893 // park() will consume the event and return immediately and we'll
894 // just spin again. This pattern can repeat, leaving _succ to simply
895 // spin on a CPU.
896
897 if (_succ == current) _succ = nullptr;
898
899 // Invariant: after clearing _succ a thread *must* retry _owner before parking.
900 OrderAccess::fence();
901 }
902
903 // Egress :
904 // current has acquired the lock -- Unlink current from the cxq or EntryList.
905 // Normally we'll find current on the EntryList .
906 // From the perspective of the lock owner (this thread), the
907 // EntryList is stable and cxq is prepend-only.
908 // The head of cxq is volatile but the interior is stable.
909 // In addition, current.TState is stable.
910
911 assert(owner_raw() == current, "invariant");
912
913 UnlinkAfterAcquire(current, &node);
914 if (_succ == current) _succ = nullptr;
915
916 assert(_succ != current, "invariant");
917 if (_Responsible == current) {
918 _Responsible = nullptr;
919 OrderAccess::fence(); // Dekker pivot-point
920
921 // We may leave threads on cxq|EntryList without a designated
922 // "Responsible" thread. This is benign. When this thread subsequently
923 // exits the monitor it can "see" such preexisting "old" threads --
924 // threads that arrived on the cxq|EntryList before the fence, above --
925 // by LDing cxq|EntryList. Newly arrived threads -- that is, threads
926 // that arrive on cxq after the ST:MEMBAR, above -- will set Responsible
927 // non-null and elect a new "Responsible" timer thread.
928 //
929 // This thread executes:
930 // ST Responsible=null; MEMBAR (in enter epilogue - here)
931 // LD cxq|EntryList (in subsequent exit)
963
964 return;
965 }
966
967 // ReenterI() is a specialized inline form of the latter half of the
968 // contended slow-path from EnterI(). We use ReenterI() only for
969 // monitor reentry in wait().
970 //
971 // In the future we should reconcile EnterI() and ReenterI().
972
973 void ObjectMonitor::ReenterI(JavaThread* current, ObjectWaiter* currentNode) {
974 assert(current != nullptr, "invariant");
975 assert(currentNode != nullptr, "invariant");
976 assert(currentNode->_thread == current, "invariant");
977 assert(_waiters > 0, "invariant");
978 assert(object()->mark() == markWord::encode(this), "invariant");
979
980 assert(current->thread_state() != _thread_blocked, "invariant");
981
982 for (;;) {
983 ObjectWaiter::TStates v = currentNode->TState;
984 guarantee(v == ObjectWaiter::TS_ENTER || v == ObjectWaiter::TS_CXQ, "invariant");
985 assert(owner_raw() != current, "invariant");
986
987 // This thread has been notified so try to reacquire the lock.
988 if (TryLock(current) == TryLockResult::Success) {
989 break;
990 }
991
992 // If that fails, spin again. Note that spin count may be zero so the above TryLock
993 // is necessary.
994 if (TrySpin(current)) {
995 break;
996 }
997
998 {
999 OSThreadContendState osts(current->osthread());
1000
1001 assert(current->thread_state() == _thread_in_vm, "invariant");
1002
1003 {
1004 ClearSuccOnSuspend csos(this);
1005 ThreadBlockInVMPreprocess<ClearSuccOnSuspend> tbivs(current, csos, true /* allow_suspend */);
1024 // *must* retry _owner before parking.
1025 OrderAccess::fence();
1026
1027 // Keep a tally of the # of futile wakeups.
1028 // Note that the counter is not protected by a lock or updated by atomics.
1029 // That is by design - we trade "lossy" counters which are exposed to
1030 // races during updates for a lower probe effect.
1031 // This PerfData object can be used in parallel with a safepoint.
1032 // See the work around in PerfDataManager::destroy().
1033 OM_PERFDATA_OP(FutileWakeups, inc());
1034 }
1035
1036 // current has acquired the lock -- Unlink current from the cxq or EntryList .
1037 // Normally we'll find current on the EntryList.
1038 // Unlinking from the EntryList is constant-time and atomic-free.
1039 // From the perspective of the lock owner (this thread), the
1040 // EntryList is stable and cxq is prepend-only.
1041 // The head of cxq is volatile but the interior is stable.
1042 // In addition, current.TState is stable.
1043
1044 assert(owner_raw() == current, "invariant");
1045 assert(object()->mark() == markWord::encode(this), "invariant");
1046 UnlinkAfterAcquire(current, currentNode);
1047 if (_succ == current) _succ = nullptr;
1048 assert(_succ != current, "invariant");
1049 currentNode->TState = ObjectWaiter::TS_RUN;
1050 OrderAccess::fence(); // see comments at the end of EnterI()
1051 }
1052
1053 // By convention we unlink a contending thread from EntryList|cxq immediately
1054 // after the thread acquires the lock in ::enter(). Equally, we could defer
1055 // unlinking the thread until ::exit()-time.
1056
1057 void ObjectMonitor::UnlinkAfterAcquire(JavaThread* current, ObjectWaiter* currentNode) {
1058 assert(owner_raw() == current, "invariant");
1059 assert(currentNode->_thread == current, "invariant");
1060
1061 if (currentNode->TState == ObjectWaiter::TS_ENTER) {
1062 // Normal case: remove current from the DLL EntryList .
1063 // This is a constant-time operation.
1064 ObjectWaiter* nxt = currentNode->_next;
1065 ObjectWaiter* prv = currentNode->_prev;
1066 if (nxt != nullptr) nxt->_prev = prv;
1067 if (prv != nullptr) prv->_next = nxt;
1068 if (currentNode == _EntryList) _EntryList = nxt;
1069 assert(nxt == nullptr || nxt->TState == ObjectWaiter::TS_ENTER, "invariant");
1070 assert(prv == nullptr || prv->TState == ObjectWaiter::TS_ENTER, "invariant");
1071 } else {
1072 assert(currentNode->TState == ObjectWaiter::TS_CXQ, "invariant");
1073 // Inopportune interleaving -- current is still on the cxq.
1074 // This usually means the enqueue of self raced an exiting thread.
1075 // Normally we'll find current near the front of the cxq, so
1076 // dequeueing is typically fast. If needbe we can accelerate
1077 // this with some MCS/CHL-like bidirectional list hints and advisory
1078 // back-links so dequeueing from the interior will normally operate
1079 // in constant-time.
1158 // exiting thread will notice and unpark the stranded thread, or, (b)
1159 // the timer expires. If the lock is high traffic then the stranding latency
1160 // will be low due to (a). If the lock is low traffic then the odds of
1161 // stranding are lower, although the worst-case stranding latency
1162 // is longer. Critically, we don't want to put excessive load in the
1163 // platform's timer subsystem. We want to minimize both the timer injection
1164 // rate (timers created/sec) as well as the number of timers active at
1165 // any one time. (more precisely, we want to minimize timer-seconds, which is
1166 // the integral of the # of active timers at any instant over time).
1167 // Both impinge on OS scalability. Given that, at most one thread parked on
1168 // a monitor will use a timer.
1169 //
1170 // There is also the risk of a futile wake-up. If we drop the lock
1171 // another thread can reacquire the lock immediately, and we can
1172 // then wake a thread unnecessarily. This is benign, and we've
1173 // structured the code so the windows are short and the frequency
1174 // of such futile wakups is low.
1175
1176 void ObjectMonitor::exit(JavaThread* current, bool not_suspended) {
1177 void* cur = owner_raw();
1178 if (current != cur) {
1179 if (LockingMode != LM_LIGHTWEIGHT && current->is_lock_owned((address)cur)) {
1180 assert(_recursions == 0, "invariant");
1181 set_owner_from_BasicLock(cur, current); // Convert from BasicLock* to Thread*.
1182 _recursions = 0;
1183 } else {
1184 // Apparent unbalanced locking ...
1185 // Naively we'd like to throw IllegalMonitorStateException.
1186 // As a practical matter we can neither allocate nor throw an
1187 // exception as ::exit() can be called from leaf routines.
1188 // see x86_32.ad Fast_Unlock() and the I1 and I2 properties.
1189 // Upon deeper reflection, however, in a properly run JVM the only
1190 // way we should encounter this situation is in the presence of
1191 // unbalanced JNI locking. TODO: CheckJNICalls.
1192 // See also: CR4414101
1193 #ifdef ASSERT
1194 LogStreamHandle(Error, monitorinflation) lsh;
1195 lsh.print_cr("ERROR: ObjectMonitor::exit(): thread=" INTPTR_FORMAT
1196 " is exiting an ObjectMonitor it does not own.", p2i(current));
1197 lsh.print_cr("The imbalance is possibly caused by JNI locking.");
1198 print_debug_style_on(&lsh);
1199 assert(false, "Non-balanced monitor enter/exit!");
1200 #endif
1201 return;
1202 }
1203 }
1204
1205 if (_recursions != 0) {
1206 _recursions--; // this is simple recursive enter
1207 return;
1208 }
1209
1210 // Invariant: after setting Responsible=null an thread must execute
1211 // a MEMBAR or other serializing instruction before fetching EntryList|cxq.
1212 _Responsible = nullptr;
1213
1214 #if INCLUDE_JFR
1215 // get the owner's thread id for the MonitorEnter event
1216 // if it is enabled and the thread isn't suspended
1217 if (not_suspended && EventJavaMonitorEnter::is_enabled()) {
1218 _previous_owner_tid = JFR_THREAD_ID(current);
1219 }
1220 #endif
1221
1222 for (;;) {
1223 assert(current == owner_raw(), "invariant");
1224
1225 // Drop the lock.
1226 // release semantics: prior loads and stores from within the critical section
1227 // must not float (reorder) past the following store that drops the lock.
1228 // Uses a storeload to separate release_store(owner) from the
1229 // successor check. The try_set_owner() below uses cmpxchg() so
1230 // we get the fence down there.
1231 release_clear_owner(current);
1232 OrderAccess::storeload();
1233
1234 if ((intptr_t(_EntryList)|intptr_t(_cxq)) == 0 || _succ != nullptr) {
1235 return;
1236 }
1237 // Other threads are blocked trying to acquire the lock.
1238
1239 // Normally the exiting thread is responsible for ensuring succession,
1240 // but if other successors are ready or other entering threads are spinning
1241 // then this thread can simply store null into _owner and exit without
1242 // waking a successor. The existence of spinners or ready successors
1243 // guarantees proper succession (liveness). Responsibility passes to the
1244 // ready or running successors. The exiting thread delegates the duty.
1245 // More precisely, if a successor already exists this thread is absolved
1246 // of the responsibility of waking (unparking) one.
1247 //
1248 // The _succ variable is critical to reducing futile wakeup frequency.
1249 // _succ identifies the "heir presumptive" thread that has been made
1259 // to drop the lock and then spin briefly to see if a spinner managed
1260 // to acquire the lock. If so, the exiting thread could exit
1261 // immediately without waking a successor, otherwise the exiting
1262 // thread would need to dequeue and wake a successor.
1263 // (Note that we'd need to make the post-drop spin short, but no
1264 // shorter than the worst-case round-trip cache-line migration time.
1265 // The dropped lock needs to become visible to the spinner, and then
1266 // the acquisition of the lock by the spinner must become visible to
1267 // the exiting thread).
1268
1269 // It appears that an heir-presumptive (successor) must be made ready.
1270 // Only the current lock owner can manipulate the EntryList or
1271 // drain _cxq, so we need to reacquire the lock. If we fail
1272 // to reacquire the lock the responsibility for ensuring succession
1273 // falls to the new owner.
1274 //
1275 if (try_set_owner_from(nullptr, current) != nullptr) {
1276 return;
1277 }
1278
1279 guarantee(owner_raw() == current, "invariant");
1280
1281 ObjectWaiter* w = nullptr;
1282
1283 w = _EntryList;
1284 if (w != nullptr) {
1285 // I'd like to write: guarantee (w->_thread != current).
1286 // But in practice an exiting thread may find itself on the EntryList.
1287 // Let's say thread T1 calls O.wait(). Wait() enqueues T1 on O's waitset and
1288 // then calls exit(). Exit release the lock by setting O._owner to null.
1289 // Let's say T1 then stalls. T2 acquires O and calls O.notify(). The
1290 // notify() operation moves T1 from O's waitset to O's EntryList. T2 then
1291 // release the lock "O". T2 resumes immediately after the ST of null into
1292 // _owner, above. T2 notices that the EntryList is populated, so it
1293 // reacquires the lock and then finds itself on the EntryList.
1294 // Given all that, we have to tolerate the circumstance where "w" is
1295 // associated with current.
1296 assert(w->TState == ObjectWaiter::TS_ENTER, "invariant");
1297 ExitEpilog(current, w);
1298 return;
1299 }
1336 }
1337
1338 // In 1-0 mode we need: ST EntryList; MEMBAR #storestore; ST _owner = nullptr
1339 // The MEMBAR is satisfied by the release_store() operation in ExitEpilog().
1340
1341 // See if we can abdicate to a spinner instead of waking a thread.
1342 // A primary goal of the implementation is to reduce the
1343 // context-switch rate.
1344 if (_succ != nullptr) continue;
1345
1346 w = _EntryList;
1347 if (w != nullptr) {
1348 guarantee(w->TState == ObjectWaiter::TS_ENTER, "invariant");
1349 ExitEpilog(current, w);
1350 return;
1351 }
1352 }
1353 }
1354
1355 void ObjectMonitor::ExitEpilog(JavaThread* current, ObjectWaiter* Wakee) {
1356 assert(owner_raw() == current, "invariant");
1357
1358 // Exit protocol:
1359 // 1. ST _succ = wakee
1360 // 2. membar #loadstore|#storestore;
1361 // 2. ST _owner = nullptr
1362 // 3. unpark(wakee)
1363
1364 _succ = Wakee->_thread;
1365 ParkEvent * Trigger = Wakee->_event;
1366
1367 // Hygiene -- once we've set _owner = nullptr we can't safely dereference Wakee again.
1368 // The thread associated with Wakee may have grabbed the lock and "Wakee" may be
1369 // out-of-scope (non-extant).
1370 Wakee = nullptr;
1371
1372 // Drop the lock.
1373 // Uses a fence to separate release_store(owner) from the LD in unpark().
1374 release_clear_owner(current);
1375 OrderAccess::fence();
1376
1377 DTRACE_MONITOR_PROBE(contended__exit, this, object(), current);
1378 Trigger->unpark();
1379
1380 // Maintain stats and report events to JVMTI
1381 OM_PERFDATA_OP(Parks, inc());
1382 }
1383
1384 // complete_exit exits a lock returning recursion count
1385 // complete_exit requires an inflated monitor
1386 // The _owner field is not always the Thread addr even with an
1387 // inflated monitor, e.g. the monitor can be inflated by a non-owning
1388 // thread due to contention.
1389 intx ObjectMonitor::complete_exit(JavaThread* current) {
1390 assert(InitDone, "Unexpectedly not initialized");
1391
1392 void* cur = owner_raw();
1393 if (current != cur) {
1394 if (LockingMode != LM_LIGHTWEIGHT && current->is_lock_owned((address)cur)) {
1395 assert(_recursions == 0, "internal state error");
1396 set_owner_from_BasicLock(cur, current); // Convert from BasicLock* to Thread*.
1397 _recursions = 0;
1398 }
1399 }
1400
1401 guarantee(current == owner_raw(), "complete_exit not owner");
1402 intx save = _recursions; // record the old recursion count
1403 _recursions = 0; // set the recursion level to be 0
1404 exit(current); // exit the monitor
1405 guarantee(owner_raw() != current, "invariant");
1406 return save;
1407 }
1408
1409 // Checks that the current THREAD owns this monitor and causes an
1410 // immediate return if it doesn't. We don't use the CHECK macro
1411 // because we want the IMSE to be the only exception that is thrown
1412 // from the call site when false is returned. Any other pending
1413 // exception is ignored.
1414 #define CHECK_OWNER() \
1415 do { \
1416 if (!check_owner(THREAD)) { \
1417 assert(HAS_PENDING_EXCEPTION, "expected a pending IMSE here."); \
1418 return; \
1419 } \
1420 } while (false)
1421
1422 // Returns true if the specified thread owns the ObjectMonitor.
1423 // Otherwise returns false and throws IllegalMonitorStateException
1424 // (IMSE). If there is a pending exception and the specified thread
1425 // is not the owner, that exception will be replaced by the IMSE.
1426 bool ObjectMonitor::check_owner(TRAPS) {
1427 JavaThread* current = THREAD;
1428 void* cur = owner_raw();
1429 assert(cur != anon_owner_ptr(), "no anon owner here");
1430 if (cur == current) {
1431 return true;
1432 }
1433 if (LockingMode != LM_LIGHTWEIGHT && current->is_lock_owned((address)cur)) {
1434 set_owner_from_BasicLock(cur, current); // Convert from BasicLock* to Thread*.
1435 _recursions = 0;
1436 return true;
1437 }
1438 THROW_MSG_(vmSymbols::java_lang_IllegalMonitorStateException(),
1439 "current thread is not owner", false);
1440 }
1441
1442 static inline bool is_excluded(const Klass* monitor_klass) {
1443 assert(monitor_klass != nullptr, "invariant");
1444 NOT_JFR_RETURN_(false);
1445 JFR_ONLY(return vmSymbols::jdk_jfr_internal_management_HiddenWait() == monitor_klass->name();)
1446 }
1447
1448 static void post_monitor_wait_event(EventJavaMonitorWait* event,
1449 ObjectMonitor* monitor,
1450 uint64_t notifier_tid,
1451 jlong timeout,
1452 bool timedout) {
1453 assert(event != nullptr, "invariant");
1454 assert(monitor != nullptr, "invariant");
1455 const Klass* monitor_klass = monitor->object()->klass();
1456 if (is_excluded(monitor_klass)) {
1457 return;
1458 }
1459 event->set_monitorClass(monitor_klass);
1460 event->set_timeout(timeout);
1461 // Set an address that is 'unique enough', such that events close in
1462 // time and with the same address are likely (but not guaranteed) to
1463 // belong to the same object.
1464 event->set_address((uintptr_t)monitor);
1465 event->set_notifier(notifier_tid);
1466 event->set_timedOut(timedout);
1467 event->commit();
1468 }
1469
1470 // -----------------------------------------------------------------------------
1471 // Wait/Notify/NotifyAll
1472 //
1473 // Note: a subset of changes to ObjectMonitor::wait()
1474 // will need to be replicated in complete_exit
1475 void ObjectMonitor::wait(jlong millis, bool interruptible, TRAPS) {
1476 JavaThread* current = THREAD;
1477
1478 assert(InitDone, "Unexpectedly not initialized");
1479
1480 CHECK_OWNER(); // Throws IMSE if not owner.
1481
1482 EventJavaMonitorWait event;
1483
1484 // check for a pending interrupt
1485 if (interruptible && current->is_interrupted(true) && !HAS_PENDING_EXCEPTION) {
1486 // post monitor waited event. Note that this is past-tense, we are done waiting.
1487 if (JvmtiExport::should_post_monitor_waited()) {
1488 // Note: 'false' parameter is passed here because the
1489 // wait was not timed out due to thread interrupt.
1490 JvmtiExport::post_monitor_waited(current, this, false);
1491
1492 // In this short circuit of the monitor wait protocol, the
1493 // current thread never drops ownership of the monitor and
1494 // never gets added to the wait queue so the current thread
1495 // cannot be made the successor. This means that the
1496 // JVMTI_EVENT_MONITOR_WAITED event handler cannot accidentally
1497 // consume an unpark() meant for the ParkEvent associated with
1498 // this ObjectMonitor.
1499 }
1500 if (event.should_commit()) {
1501 post_monitor_wait_event(&event, this, 0, millis, false);
1502 }
1503 THROW(vmSymbols::java_lang_InterruptedException());
1504 return;
1505 }
1506
1507 current->set_current_waiting_monitor(this);
1508
1509 // create a node to be put into the queue
1510 // Critically, after we reset() the event but prior to park(), we must check
1511 // for a pending interrupt.
1512 ObjectWaiter node(current);
1513 node.TState = ObjectWaiter::TS_WAIT;
1514 current->_ParkEvent->reset();
1515 OrderAccess::fence(); // ST into Event; membar ; LD interrupted-flag
1516
1517 // Enter the waiting queue, which is a circular doubly linked list in this case
1518 // but it could be a priority queue or any data structure.
1519 // _WaitSetLock protects the wait queue. Normally the wait queue is accessed only
1520 // by the owner of the monitor *except* in the case where park()
1521 // returns because of a timeout of interrupt. Contention is exceptionally rare
1522 // so we use a simple spin-lock instead of a heavier-weight blocking lock.
1523
1524 Thread::SpinAcquire(&_WaitSetLock, "WaitSet - add");
1525 AddWaiter(&node);
1526 Thread::SpinRelease(&_WaitSetLock);
1527
1528 _Responsible = nullptr;
1529
1530 intx save = _recursions; // record the old recursion count
1531 _waiters++; // increment the number of waiters
1532 _recursions = 0; // set the recursion level to be 1
1533 exit(current); // exit the monitor
1534 guarantee(owner_raw() != current, "invariant");
1535
1536 // The thread is on the WaitSet list - now park() it.
1537 // On MP systems it's conceivable that a brief spin before we park
1538 // could be profitable.
1539 //
1540 // TODO-FIXME: change the following logic to a loop of the form
1541 // while (!timeout && !interrupted && _notified == 0) park()
1542
1543 int ret = OS_OK;
1544 int WasNotified = 0;
1545
1546 // Need to check interrupt state whilst still _thread_in_vm
1547 bool interrupted = interruptible && current->is_interrupted(false);
1548
1549 { // State transition wrappers
1550 OSThread* osthread = current->osthread();
1551 OSThreadWaitState osts(osthread, true);
1552
1553 assert(current->thread_state() == _thread_in_vm, "invariant");
1554
1555 {
1556 ClearSuccOnSuspend csos(this);
1557 ThreadBlockInVMPreprocess<ClearSuccOnSuspend> tbivs(current, csos, true /* allow_suspend */);
1558 if (interrupted || HAS_PENDING_EXCEPTION) {
1559 // Intentionally empty
1560 } else if (node._notified == 0) {
1561 if (millis <= 0) {
1562 current->_ParkEvent->park();
1563 } else {
1564 ret = current->_ParkEvent->park(millis);
1565 }
1566 }
1567 }
1568
1569 // Node may be on the WaitSet, the EntryList (or cxq), or in transition
1570 // from the WaitSet to the EntryList.
1571 // See if we need to remove Node from the WaitSet.
1572 // We use double-checked locking to avoid grabbing _WaitSetLock
1573 // if the thread is not on the wait queue.
1574 //
1575 // Note that we don't need a fence before the fetch of TState.
1576 // In the worst case we'll fetch a old-stale value of TS_WAIT previously
1577 // written by the is thread. (perhaps the fetch might even be satisfied
1578 // by a look-aside into the processor's own store buffer, although given
1579 // the length of the code path between the prior ST and this load that's
1580 // highly unlikely). If the following LD fetches a stale TS_WAIT value
1581 // then we'll acquire the lock and then re-fetch a fresh TState value.
1582 // That is, we fail toward safety.
1583
1584 if (node.TState == ObjectWaiter::TS_WAIT) {
1585 Thread::SpinAcquire(&_WaitSetLock, "WaitSet - unlink");
1586 if (node.TState == ObjectWaiter::TS_WAIT) {
1587 DequeueSpecificWaiter(&node); // unlink from WaitSet
1588 assert(node._notified == 0, "invariant");
1589 node.TState = ObjectWaiter::TS_RUN;
1590 }
1591 Thread::SpinRelease(&_WaitSetLock);
1592 }
1593
1594 // The thread is now either on off-list (TS_RUN),
1595 // on the EntryList (TS_ENTER), or on the cxq (TS_CXQ).
1596 // The Node's TState variable is stable from the perspective of this thread.
1597 // No other threads will asynchronously modify TState.
1598 guarantee(node.TState != ObjectWaiter::TS_WAIT, "invariant");
1599 OrderAccess::loadload();
1600 if (_succ == current) _succ = nullptr;
1601 WasNotified = node._notified;
1602
1603 // Reentry phase -- reacquire the monitor.
1604 // re-enter contended monitor after object.wait().
1605 // retain OBJECT_WAIT state until re-enter successfully completes
1606 // Thread state is thread_in_vm and oop access is again safe,
1607 // although the raw address of the object may have changed.
1608 // (Don't cache naked oops over safepoints, of course).
1609
1610 // post monitor waited event. Note that this is past-tense, we are done waiting.
1611 if (JvmtiExport::should_post_monitor_waited()) {
1612 JvmtiExport::post_monitor_waited(current, this, ret == OS_TIMEOUT);
1613
1614 if (node._notified != 0 && _succ == current) {
1615 // In this part of the monitor wait-notify-reenter protocol it
1616 // is possible (and normal) for another thread to do a fastpath
1617 // monitor enter-exit while this thread is still trying to get
1618 // to the reenter portion of the protocol.
1619 //
1620 // The ObjectMonitor was notified and the current thread is
1621 // the successor which also means that an unpark() has already
1622 // been done. The JVMTI_EVENT_MONITOR_WAITED event handler can
1623 // consume the unpark() that was done when the successor was
1624 // set because the same ParkEvent is shared between Java
1625 // monitors and JVM/TI RawMonitors (for now).
1626 //
1627 // We redo the unpark() to ensure forward progress, i.e., we
1628 // don't want all pending threads hanging (parked) with none
1629 // entering the unlocked monitor.
1630 node._event->unpark();
1631 }
1632 }
1633
1634 if (event.should_commit()) {
1635 post_monitor_wait_event(&event, this, node._notifier_tid, millis, ret == OS_TIMEOUT);
1636 }
1637
1638 OrderAccess::fence();
1639
1640 assert(owner_raw() != current, "invariant");
1641 ObjectWaiter::TStates v = node.TState;
1642 if (v == ObjectWaiter::TS_RUN) {
1643 enter(current);
1644 } else {
1645 guarantee(v == ObjectWaiter::TS_ENTER || v == ObjectWaiter::TS_CXQ, "invariant");
1646 ReenterI(current, &node);
1647 node.wait_reenter_end(this);
1648 }
1649
1650 // current has reacquired the lock.
1651 // Lifecycle - the node representing current must not appear on any queues.
1652 // Node is about to go out-of-scope, but even if it were immortal we wouldn't
1653 // want residual elements associated with this thread left on any lists.
1654 guarantee(node.TState == ObjectWaiter::TS_RUN, "invariant");
1655 assert(owner_raw() == current, "invariant");
1656 assert(_succ != current, "invariant");
1657 } // OSThreadWaitState()
1658
1659 current->set_current_waiting_monitor(nullptr);
1660
1661 guarantee(_recursions == 0, "invariant");
1662 int relock_count = JvmtiDeferredUpdates::get_and_reset_relock_count_after_wait(current);
1663 _recursions = save // restore the old recursion count
1664 + relock_count; // increased by the deferred relock count
1665 current->inc_held_monitor_count(relock_count); // Deopt never entered these counts.
1666 _waiters--; // decrement the number of waiters
1667
1668 // Verify a few postconditions
1669 assert(owner_raw() == current, "invariant");
1670 assert(_succ != current, "invariant");
1671 assert(object()->mark() == markWord::encode(this), "invariant");
1672
1673 // check if the notification happened
1674 if (!WasNotified) {
1675 // no, it could be timeout or Thread.interrupt() or both
1676 // check for interrupt event, otherwise it is timeout
1677 if (interruptible && current->is_interrupted(true) && !HAS_PENDING_EXCEPTION) {
1678 THROW(vmSymbols::java_lang_InterruptedException());
1679 }
1680 }
1681
1682 // NOTE: Spurious wake up will be consider as timeout.
1683 // Monitor notify has precedence over thread interrupt.
1684 }
1685
1686
1687 // Consider:
1688 // If the lock is cool (cxq == null && succ == null) and we're on an MP system
1689 // then instead of transferring a thread from the WaitSet to the EntryList
1690 // we might just dequeue a thread from the WaitSet and directly unpark() it.
1691
1692 void ObjectMonitor::INotify(JavaThread* current) {
1693 Thread::SpinAcquire(&_WaitSetLock, "WaitSet - notify");
1694 ObjectWaiter* iterator = DequeueWaiter();
1695 if (iterator != nullptr) {
1696 guarantee(iterator->TState == ObjectWaiter::TS_WAIT, "invariant");
1697 guarantee(iterator->_notified == 0, "invariant");
1698 // Disposition - what might we do with iterator ?
1699 // a. add it directly to the EntryList - either tail (policy == 1)
1700 // or head (policy == 0).
1701 // b. push it onto the front of the _cxq (policy == 2).
1702 // For now we use (b).
1703
1704 iterator->TState = ObjectWaiter::TS_ENTER;
1705
1706 iterator->_notified = 1;
1707 iterator->_notifier_tid = JFR_THREAD_ID(current);
1708
1709 ObjectWaiter* list = _EntryList;
1710 if (list != nullptr) {
1711 assert(list->_prev == nullptr, "invariant");
1712 assert(list->TState == ObjectWaiter::TS_ENTER, "invariant");
1713 assert(list != iterator, "invariant");
1714 }
1715
1716 // prepend to cxq
1717 if (list == nullptr) {
1718 iterator->_next = iterator->_prev = nullptr;
1719 _EntryList = iterator;
1720 } else {
1721 iterator->TState = ObjectWaiter::TS_CXQ;
1722 for (;;) {
1723 ObjectWaiter* front = _cxq;
1724 iterator->_next = front;
1725 if (Atomic::cmpxchg(&_cxq, front, iterator) == front) {
1726 break;
1727 }
1728 }
1729 }
1730
1731 // _WaitSetLock protects the wait queue, not the EntryList. We could
1732 // move the add-to-EntryList operation, above, outside the critical section
1733 // protected by _WaitSetLock. In practice that's not useful. With the
1734 // exception of wait() timeouts and interrupts the monitor owner
1735 // is the only thread that grabs _WaitSetLock. There's almost no contention
1736 // on _WaitSetLock so it's not profitable to reduce the length of the
1737 // critical section.
1738
1739 iterator->wait_reenter_begin(this);
1740 }
1741 Thread::SpinRelease(&_WaitSetLock);
1742 }
1743
1744 // Consider: a not-uncommon synchronization bug is to use notify() when
1745 // notifyAll() is more appropriate, potentially resulting in stranded
1746 // threads; this is one example of a lost wakeup. A useful diagnostic
1747 // option is to force all notify() operations to behave as notifyAll().
1748 //
1749 // Note: We can also detect many such problems with a "minimum wait".
1750 // When the "minimum wait" is set to a small non-zero timeout value
1751 // and the program does not hang whereas it did absent "minimum wait",
1752 // that suggests a lost wakeup bug.
1753
1754 void ObjectMonitor::notify(TRAPS) {
1755 JavaThread* current = THREAD;
1756 CHECK_OWNER(); // Throws IMSE if not owner.
1757 if (_WaitSet == nullptr) {
1758 return;
1759 }
1770 // waitset is "ABCD" and the EntryList is "XYZ". After a notifyAll() in prepend
1771 // mode the waitset will be empty and the EntryList will be "DCBAXYZ".
1772
1773 void ObjectMonitor::notifyAll(TRAPS) {
1774 JavaThread* current = THREAD;
1775 CHECK_OWNER(); // Throws IMSE if not owner.
1776 if (_WaitSet == nullptr) {
1777 return;
1778 }
1779
1780 DTRACE_MONITOR_PROBE(notifyAll, this, object(), current);
1781 int tally = 0;
1782 while (_WaitSet != nullptr) {
1783 tally++;
1784 INotify(current);
1785 }
1786
1787 OM_PERFDATA_OP(Notifications, inc(tally));
1788 }
1789
1790 // -----------------------------------------------------------------------------
1791 // Adaptive Spinning Support
1792 //
1793 // Adaptive spin-then-block - rational spinning
1794 //
1795 // Note that we spin "globally" on _owner with a classic SMP-polite TATAS
1796 // algorithm. On high order SMP systems it would be better to start with
1797 // a brief global spin and then revert to spinning locally. In the spirit of MCS/CLH,
1798 // a contending thread could enqueue itself on the cxq and then spin locally
1799 // on a thread-specific variable such as its ParkEvent._Event flag.
1800 // That's left as an exercise for the reader. Note that global spinning is
1801 // not problematic on Niagara, as the L2 cache serves the interconnect and
1802 // has both low latency and massive bandwidth.
1803 //
1804 // Broadly, we can fix the spin frequency -- that is, the % of contended lock
1805 // acquisition attempts where we opt to spin -- at 100% and vary the spin count
1806 // (duration) or we can fix the count at approximately the duration of
1807 // a context switch and vary the frequency. Of course we could also
1808 // vary both satisfying K == Frequency * Duration, where K is adaptive by monitor.
1809 // For a description of 'Adaptive spin-then-block mutual exclusion in
1926 }
1927
1928 //
1929 // Consider the following alternative:
1930 // Periodically set _SpinDuration = _SpinLimit and try a long/full
1931 // spin attempt. "Periodically" might mean after a tally of
1932 // the # of failed spin attempts (or iterations) reaches some threshold.
1933 // This takes us into the realm of 1-out-of-N spinning, where we
1934 // hold the duration constant but vary the frequency.
1935
1936 int ctr = _SpinDuration;
1937 if (ctr <= 0) return false;
1938
1939 // We're good to spin ... spin ingress.
1940 // CONSIDER: use Prefetch::write() to avoid RTS->RTO upgrades
1941 // when preparing to LD...CAS _owner, etc and the CAS is likely
1942 // to succeed.
1943 if (_succ == nullptr) {
1944 _succ = current;
1945 }
1946 Thread* prv = nullptr;
1947
1948 // There are three ways to exit the following loop:
1949 // 1. A successful spin where this thread has acquired the lock.
1950 // 2. Spin failure with prejudice
1951 // 3. Spin failure without prejudice
1952
1953 while (--ctr >= 0) {
1954
1955 // Periodic polling -- Check for pending GC
1956 // Threads may spin while they're unsafe.
1957 // We don't want spinning threads to delay the JVM from reaching
1958 // a stop-the-world safepoint or to steal cycles from GC.
1959 // If we detect a pending safepoint we abort in order that
1960 // (a) this thread, if unsafe, doesn't delay the safepoint, and (b)
1961 // this thread, if safe, doesn't steal cycles from GC.
1962 // This is in keeping with the "no loitering in runtime" rule.
1963 // We periodically check to see if there's a safepoint pending.
1964 if ((ctr & 0xFF) == 0) {
1965 // Can't call SafepointMechanism::should_process() since that
1966 // might update the poll values and we could be in a thread_blocked
1967 // state here which is not allowed so just check the poll.
1968 if (SafepointMechanism::local_poll_armed(current)) {
1969 break;
1970 }
1971 SpinPause();
1972 }
1973
1974 // Probe _owner with TATAS
1975 // If this thread observes the monitor transition or flicker
1976 // from locked to unlocked to locked, then the odds that this
1977 // thread will acquire the lock in this spin attempt go down
1978 // considerably. The same argument applies if the CAS fails
1979 // or if we observe _owner change from one non-null value to
1980 // another non-null value. In such cases we might abort
1981 // the spin without prejudice or apply a "penalty" to the
1982 // spin count-down variable "ctr", reducing it by 100, say.
1983
1984 JavaThread* ox = static_cast<JavaThread*>(owner_raw());
1985 if (ox == nullptr) {
1986 ox = static_cast<JavaThread*>(try_set_owner_from(nullptr, current));
1987 if (ox == nullptr) {
1988 // The CAS succeeded -- this thread acquired ownership
1989 // Take care of some bookkeeping to exit spin state.
1990 if (_succ == current) {
1991 _succ = nullptr;
1992 }
1993
1994 // Increase _SpinDuration :
1995 // The spin was successful (profitable) so we tend toward
1996 // longer spin attempts in the future.
1997 // CONSIDER: factor "ctr" into the _SpinDuration adjustment.
1998 // If we acquired the lock early in the spin cycle it
1999 // makes sense to increase _SpinDuration proportionally.
2000 // Note that we don't clamp SpinDuration precisely at SpinLimit.
2001 _SpinDuration = adjust_up(_SpinDuration);
2002 return true;
2003 }
2004
2005 // The CAS failed ... we can take any of the following actions:
2006 // * penalize: ctr -= CASPenalty
2031 // Invariant: after setting succ=null a contending thread
2032 // must recheck-retry _owner before parking. This usually happens
2033 // in the normal usage of TrySpin(), but it's safest
2034 // to make TrySpin() as foolproof as possible.
2035 OrderAccess::fence();
2036 if (TryLock(current) == TryLockResult::Success) {
2037 return true;
2038 }
2039 }
2040
2041 return false;
2042 }
2043
2044
2045 // -----------------------------------------------------------------------------
2046 // WaitSet management ...
2047
2048 ObjectWaiter::ObjectWaiter(JavaThread* current) {
2049 _next = nullptr;
2050 _prev = nullptr;
2051 _notified = 0;
2052 _notifier_tid = 0;
2053 TState = TS_RUN;
2054 _thread = current;
2055 _event = _thread->_ParkEvent;
2056 _active = false;
2057 assert(_event != nullptr, "invariant");
2058 }
2059
2060 void ObjectWaiter::wait_reenter_begin(ObjectMonitor * const mon) {
2061 _active = JavaThreadBlockedOnMonitorEnterState::wait_reenter_begin(_thread, mon);
2062 }
2063
2064 void ObjectWaiter::wait_reenter_end(ObjectMonitor * const mon) {
2065 JavaThreadBlockedOnMonitorEnterState::wait_reenter_end(_thread, _active);
2066 }
2067
2068 inline void ObjectMonitor::AddWaiter(ObjectWaiter* node) {
2069 assert(node != nullptr, "should not add null node");
2070 assert(node->_prev == nullptr, "node already in list");
2071 assert(node->_next == nullptr, "node already in list");
2072 // put node at end of queue (circular doubly linked list)
2073 if (_WaitSet == nullptr) {
2074 _WaitSet = node;
2075 node->_prev = node;
2076 node->_next = node;
2077 } else {
2155 { \
2156 n = PerfDataManager::create_variable(SUN_RT, #n, PerfData::U_Events, \
2157 CHECK); \
2158 }
2159 NEWPERFCOUNTER(_sync_Inflations);
2160 NEWPERFCOUNTER(_sync_Deflations);
2161 NEWPERFCOUNTER(_sync_ContendedLockAttempts);
2162 NEWPERFCOUNTER(_sync_FutileWakeups);
2163 NEWPERFCOUNTER(_sync_Parks);
2164 NEWPERFCOUNTER(_sync_Notifications);
2165 NEWPERFVARIABLE(_sync_MonExtant);
2166 #undef NEWPERFCOUNTER
2167 #undef NEWPERFVARIABLE
2168 }
2169
2170 _oop_storage = OopStorageSet::create_weak("ObjectSynchronizer Weak", mtSynchronizer);
2171
2172 DEBUG_ONLY(InitDone = true;)
2173 }
2174
2175 void ObjectMonitor::print_on(outputStream* st) const {
2176 // The minimal things to print for markWord printing, more can be added for debugging and logging.
2177 st->print("{contentions=0x%08x,waiters=0x%08x"
2178 ",recursions=" INTX_FORMAT ",owner=" INTPTR_FORMAT "}",
2179 contentions(), waiters(), recursions(),
2180 p2i(owner()));
2181 }
2182 void ObjectMonitor::print() const { print_on(tty); }
2183
2184 #ifdef ASSERT
2185 // Print the ObjectMonitor like a debugger would:
2186 //
2187 // (ObjectMonitor) 0x00007fdfb6012e40 = {
2188 // _header = 0x0000000000000001
2189 // _object = 0x000000070ff45fd0
2190 // _pad_buf0 = {
2191 // [0] = '\0'
2192 // ...
2193 // [43] = '\0'
2194 // }
|
35 #include "oops/markWord.hpp"
36 #include "oops/oop.inline.hpp"
37 #include "oops/oopHandle.inline.hpp"
38 #include "oops/weakHandle.inline.hpp"
39 #include "prims/jvmtiDeferredUpdates.hpp"
40 #include "prims/jvmtiExport.hpp"
41 #include "runtime/atomic.hpp"
42 #include "runtime/globals.hpp"
43 #include "runtime/handles.inline.hpp"
44 #include "runtime/interfaceSupport.inline.hpp"
45 #include "runtime/javaThread.inline.hpp"
46 #include "runtime/mutexLocker.hpp"
47 #include "runtime/objectMonitor.hpp"
48 #include "runtime/objectMonitor.inline.hpp"
49 #include "runtime/orderAccess.hpp"
50 #include "runtime/osThread.hpp"
51 #include "runtime/perfData.hpp"
52 #include "runtime/safefetch.hpp"
53 #include "runtime/safepointMechanism.inline.hpp"
54 #include "runtime/sharedRuntime.hpp"
55 #include "runtime/threads.hpp"
56 #include "services/threadService.hpp"
57 #include "utilities/dtrace.hpp"
58 #include "utilities/globalDefinitions.hpp"
59 #include "utilities/macros.hpp"
60 #include "utilities/preserveException.hpp"
61 #if INCLUDE_JFR
62 #include "jfr/support/jfrFlush.hpp"
63 #endif
64
65 #ifdef DTRACE_ENABLED
66
67 // Only bother with this argument setup if dtrace is available
68 // TODO-FIXME: probes should not fire when caller is _blocked. assert() accordingly.
69
70
71 #define DTRACE_MONITOR_PROBE_COMMON(obj, thread) \
72 char* bytes = nullptr; \
73 int len = 0; \
74 jlong jtid = SharedRuntime::get_java_tid(thread); \
75 Symbol* klassname = obj->klass()->name(); \
96 #define DTRACE_MONITOR_PROBE(probe, monitor, obj, thread) \
97 { \
98 if (DTraceMonitorProbes) { \
99 DTRACE_MONITOR_PROBE_COMMON(obj, thread); \
100 HOTSPOT_MONITOR_##probe(jtid, \
101 (uintptr_t)(monitor), bytes, len); \
102 } \
103 }
104
105 #else // ndef DTRACE_ENABLED
106
107 #define DTRACE_MONITOR_WAIT_PROBE(obj, thread, millis, mon) {;}
108 #define DTRACE_MONITOR_PROBE(probe, obj, thread, mon) {;}
109
110 #endif // ndef DTRACE_ENABLED
111
112 DEBUG_ONLY(static volatile bool InitDone = false;)
113
114 OopStorage* ObjectMonitor::_oop_storage = nullptr;
115
116 OopHandle ObjectMonitor::_vthread_cxq_head;
117 ParkEvent* ObjectMonitor::_vthread_unparker_ParkEvent = nullptr;
118
119 static void post_virtual_thread_pinned_event(JavaThread* current, const char* reason) {
120 EventVirtualThreadPinned e;
121 if (e.should_commit()) {
122 e.set_pinnedReason(reason);
123 e.set_carrierThread(JFR_JVM_THREAD_ID(current));
124 e.commit();
125 }
126 }
127
128 // -----------------------------------------------------------------------------
129 // Theory of operations -- Monitors lists, thread residency, etc:
130 //
131 // * A thread acquires ownership of a monitor by successfully
132 // CAS()ing the _owner field from null to non-null.
133 //
134 // * Invariant: A thread appears on at most one monitor list --
135 // cxq, EntryList or WaitSet -- at any one time.
136 //
137 // * Contending threads "push" themselves onto the cxq with CAS
138 // and then spin/park.
139 //
140 // * After a contending thread eventually acquires the lock it must
141 // dequeue itself from either the EntryList or the cxq.
142 //
143 // * The exiting thread identifies and unparks an "heir presumptive"
144 // tentative successor thread on the EntryList. Critically, the
145 // exiting thread doesn't unlink the successor thread from the EntryList.
146 // After having been unparked, the wakee will recontend for ownership of
147 // the monitor. The successor (wakee) will either acquire the lock or
245 switch (jt->thread_state()) {
246 case _thread_in_vm: // the usual case
247 case _thread_in_Java: // during deopt
248 break;
249 default:
250 fatal("called from an unsafe thread state");
251 }
252 assert(jt->is_active_Java_thread(), "must be active JavaThread");
253 } else {
254 // However, ThreadService::get_current_contended_monitor()
255 // can call here via the VMThread so sanity check it.
256 assert(self->is_VM_thread(), "must be");
257 }
258 #endif // ASSERT
259 }
260
261 ObjectMonitor::ObjectMonitor(oop object) :
262 _header(markWord::zero()),
263 _object(_oop_storage, object),
264 _owner(nullptr),
265 _stack_locker(nullptr),
266 _previous_owner_tid(0),
267 _next_om(nullptr),
268 _recursions(0),
269 _EntryList(nullptr),
270 _cxq(nullptr),
271 _succ(nullptr),
272 _Responsible(nullptr),
273 _SpinDuration(ObjectMonitor::Knob_SpinLimit),
274 _contentions(0),
275 _WaitSet(nullptr),
276 _waiters(0),
277 _WaitSetLock(0)
278 { }
279
280 ObjectMonitor::~ObjectMonitor() {
281 _object.release(_oop_storage);
282 }
283
284 oop ObjectMonitor::object() const {
285 check_object_context();
313
314 // -----------------------------------------------------------------------------
315 // Enter support
316
317 bool ObjectMonitor::enter_for(JavaThread* locking_thread) {
318 // Used by ObjectSynchronizer::enter_for to enter for another thread.
319 // The monitor is private to or already owned by locking_thread which must be suspended.
320 // So this code may only contend with deflation.
321 assert(locking_thread == Thread::current() || locking_thread->is_obj_deopt_suspend(), "must be");
322
323 // Block out deflation as soon as possible.
324 add_to_contentions(1);
325
326 bool success = false;
327 if (!is_being_async_deflated()) {
328 void* prev_owner = try_set_owner_from(nullptr, locking_thread);
329
330 if (prev_owner == nullptr) {
331 assert(_recursions == 0, "invariant");
332 success = true;
333 } else if (prev_owner == owner_for(locking_thread)) {
334 _recursions++;
335 success = true;
336 } else if (prev_owner == DEFLATER_MARKER) {
337 // Racing with deflation.
338 prev_owner = try_set_owner_from(DEFLATER_MARKER, locking_thread);
339 if (prev_owner == DEFLATER_MARKER) {
340 // Cancelled deflation. Increment contentions as part of the deflation protocol.
341 add_to_contentions(1);
342 success = true;
343 } else if (prev_owner == nullptr) {
344 // At this point we cannot race with deflation as we have both incremented
345 // contentions, seen contention > 0 and seen a DEFLATER_MARKER.
346 // success will only be false if this races with something other than
347 // deflation.
348 prev_owner = try_set_owner_from(nullptr, locking_thread);
349 success = prev_owner == nullptr;
350 }
351 }
352 assert(success, "Failed to enter_for: locking_thread=" INTPTR_FORMAT
353 ", this=" INTPTR_FORMAT "{owner=" INTPTR_FORMAT "}, observed owner: " INTPTR_FORMAT,
354 p2i(locking_thread), p2i(this), p2i(owner_raw()), p2i(prev_owner));
355 } else {
356 // Async deflation is in progress and our contentions increment
357 // above lost the race to async deflation. Undo the work and
358 // force the caller to retry.
359 const oop l_object = object();
360 if (l_object != nullptr) {
361 // Attempt to restore the header/dmw to the object's header so that
362 // we only retry once if the deflater thread happens to be slow.
363 install_displaced_markword_in_object(l_object);
364 }
365 }
366
367 add_to_contentions(-1);
368
369 assert(!success || is_owner(locking_thread), "must be");
370
371 return success;
372 }
373
374 bool ObjectMonitor::enter(JavaThread* current) {
375 assert(current == JavaThread::current(), "must be");
376 // The following code is ordered to check the most common cases first
377 // and to reduce RTS->RTO cache line upgrades on SPARC and IA32 processors.
378
379 void* cur = try_set_owner_from(nullptr, current);
380 if (cur == nullptr) {
381 assert(_recursions == 0, "invariant");
382 return true;
383 }
384
385 if (cur == owner_for(current)) {
386 // TODO-FIXME: check for integer overflow! BUGID 6557169.
387 _recursions++;
388 return true;
389 }
390
391 // We've encountered genuine contention.
392
393 // Try one round of spinning *before* enqueueing current
394 // and before going through the awkward and expensive state
395 // transitions. The following spin is strictly optional ...
396 // Note that if we acquire the monitor from an initial spin
397 // we forgo posting JVMTI events and firing DTRACE probes.
398 if (TrySpin(current)) {
399 assert(owner_raw() == owner_for(current), "must be current: owner=" INTPTR_FORMAT, p2i(owner_raw()));
400 assert(_recursions == 0, "must be 0: recursions=" INTX_FORMAT, _recursions);
401 assert(object()->mark() == markWord::encode(this),
402 "object mark must match encoded this: mark=" INTPTR_FORMAT
403 ", encoded this=" INTPTR_FORMAT, object()->mark().value(),
404 markWord::encode(this).value());
405 return true;
406 }
407
408 assert(owner_raw() != owner_for(current), "invariant");
409 assert(_succ != current, "invariant");
410 assert(!SafepointSynchronize::is_at_safepoint(), "invariant");
411 assert(current->thread_state() != _thread_blocked, "invariant");
412
413 // Keep track of contention for JVM/TI and M&M queries.
414 add_to_contentions(1);
415 if (is_being_async_deflated()) {
416 // Async deflation is in progress and our contentions increment
417 // above lost the race to async deflation. Undo the work and
418 // force the caller to retry.
419 const oop l_object = object();
420 if (l_object != nullptr) {
421 // Attempt to restore the header/dmw to the object's header so that
422 // we only retry once if the deflater thread happens to be slow.
423 install_displaced_markword_in_object(l_object);
424 }
425 add_to_contentions(-1);
426 return false;
427 }
428
436 event.set_address((uintptr_t)this);
437 }
438
439 { // Change java thread status to indicate blocked on monitor enter.
440 JavaThreadBlockedOnMonitorEnterState jtbmes(current, this);
441
442 assert(current->current_pending_monitor() == nullptr, "invariant");
443 current->set_current_pending_monitor(this);
444
445 DTRACE_MONITOR_PROBE(contended__enter, this, object(), current);
446 if (JvmtiExport::should_post_monitor_contended_enter()) {
447 JvmtiExport::post_monitor_contended_enter(current, this);
448
449 // The current thread does not yet own the monitor and does not
450 // yet appear on any queues that would get it made the successor.
451 // This means that the JVMTI_EVENT_MONITOR_CONTENDED_ENTER event
452 // handler cannot accidentally consume an unpark() meant for the
453 // ParkEvent associated with this ObjectMonitor.
454 }
455
456 #ifdef LOOM_MONITOR_SUPPORT
457 ContinuationEntry* ce = current->last_continuation();
458 if (ce != nullptr && ce->is_virtual_thread() && current->is_on_monitorenter()) {
459 int result = Continuation::try_preempt(current, ce->cont_oop(current), freeze_on_monitorenter);
460 if (result == freeze_ok) {
461 bool acquired = VThreadMonitorEnter(current);
462 if (acquired) {
463 current->set_preemption_cancelled(true);
464 if (JvmtiExport::should_post_monitor_contended_entered()) {
465 // We are going to call thaw again after this and finish the VMTS
466 // transition so no need to do it here. We will post the event there.
467 current->set_contended_entered_monitor(this);
468 }
469 }
470 current->set_current_pending_monitor(nullptr);
471 DEBUG_ONLY(int state = java_lang_VirtualThread::state(current->vthread()));
472 assert((acquired && current->preemption_cancelled() && state == java_lang_VirtualThread::RUNNING) ||
473 (!acquired && !current->preemption_cancelled() && state == java_lang_VirtualThread::BLOCKING), "invariant");
474 return true;
475 }
476 if (result == freeze_pinned_native) {
477 post_virtual_thread_pinned_event(current, "Native frame or <clinit> on stack");
478 }
479 }
480 #endif
481
482 OSThreadContendState osts(current->osthread());
483
484 assert(current->thread_state() == _thread_in_vm, "invariant");
485
486 for (;;) {
487 ExitOnSuspend eos(this);
488 {
489 ThreadBlockInVMPreprocess<ExitOnSuspend> tbivs(current, eos, true /* allow_suspend */);
490 EnterI(current);
491 current->set_current_pending_monitor(nullptr);
492 // We can go to a safepoint at the end of this block. If we
493 // do a thread dump during that safepoint, then this thread will show
494 // as having "-locked" the monitor, but the OS and java.lang.Thread
495 // states will still report that the thread is blocked trying to
496 // acquire it.
497 // If there is a suspend request, ExitOnSuspend will exit the OM
498 // and set the OM as pending.
499 }
500 if (!eos.exited()) {
501 // ExitOnSuspend did not exit the OM
502 assert(owner_raw() == owner_for(current), "invariant");
503 break;
504 }
505 }
506
507 // We've just gotten past the enter-check-for-suspend dance and we now own
508 // the monitor free and clear.
509 }
510
511 add_to_contentions(-1);
512 assert(contentions() >= 0, "must not be negative: contentions=%d", contentions());
513
514 // Must either set _recursions = 0 or ASSERT _recursions == 0.
515 assert(_recursions == 0, "invariant");
516 assert(owner_raw() == owner_for(current), "invariant");
517 assert(_succ != current, "invariant");
518 assert(object()->mark() == markWord::encode(this), "invariant");
519
520 // The thread -- now the owner -- is back in vm mode.
521 // Report the glorious news via TI,DTrace and jvmstat.
522 // The probe effect is non-trivial. All the reportage occurs
523 // while we hold the monitor, increasing the length of the critical
524 // section. Amdahl's parallel speedup law comes vividly into play.
525 //
526 // Another option might be to aggregate the events (thread local or
527 // per-monitor aggregation) and defer reporting until a more opportune
528 // time -- such as next time some thread encounters contention but has
529 // yet to acquire the lock. While spinning that thread could
530 // spinning we could increment JVMStat counters, etc.
531
532 DTRACE_MONITOR_PROBE(contended__entered, this, object(), current);
533 if (JvmtiExport::should_post_monitor_contended_entered()) {
534 JvmtiExport::post_monitor_contended_entered(current, this);
535
536 // The current thread already owns the monitor and is not going to
571 // makes contentions negative as signals to contending threads that
572 // an async deflation is in progress. There are a number of checks
573 // as part of the protocol to make sure that the calling thread has
574 // not lost the race to a contending thread.
575 //
576 // The ObjectMonitor has been successfully async deflated when:
577 // (contentions < 0)
578 // Contending threads that see that condition know to retry their operation.
579 //
580 bool ObjectMonitor::deflate_monitor() {
581 if (is_busy()) {
582 // Easy checks are first - the ObjectMonitor is busy so no deflation.
583 return false;
584 }
585
586 const oop obj = object_peek();
587
588 if (obj == nullptr) {
589 // If the object died, we can recycle the monitor without racing with
590 // Java threads. The GC already broke the association with the object.
591 set_owner_from_raw(nullptr, DEFLATER_MARKER);
592 assert(contentions() >= 0, "must be non-negative: contentions=%d", contentions());
593 _contentions = INT_MIN; // minimum negative int
594 } else {
595 // Attempt async deflation protocol.
596
597 // Set a null owner to DEFLATER_MARKER to force any contending thread
598 // through the slow path. This is just the first part of the async
599 // deflation dance.
600 if (try_set_owner_from_raw(nullptr, DEFLATER_MARKER) != nullptr) {
601 // The owner field is no longer null so we lost the race since the
602 // ObjectMonitor is now busy.
603 return false;
604 }
605
606 if (contentions() > 0 || _waiters != 0) {
607 // Another thread has raced to enter the ObjectMonitor after
608 // is_busy() above or has already entered and waited on
609 // it which makes it busy so no deflation. Restore owner to
610 // null if it is still DEFLATER_MARKER.
611 if (try_set_owner_from_raw(DEFLATER_MARKER, nullptr) != DEFLATER_MARKER) {
612 // Deferred decrement for the JT EnterI() that cancelled the async deflation.
613 add_to_contentions(-1);
614 }
615 return false;
616 }
617
618 // Make a zero contentions field negative to force any contending threads
619 // to retry. This is the second part of the async deflation dance.
620 if (Atomic::cmpxchg(&_contentions, 0, INT_MIN) != 0) {
621 // Contentions was no longer 0 so we lost the race since the
622 // ObjectMonitor is now busy. Restore owner to null if it is
623 // still DEFLATER_MARKER:
624 if (try_set_owner_from_raw(DEFLATER_MARKER, nullptr) != DEFLATER_MARKER) {
625 // Deferred decrement for the JT EnterI() that cancelled the async deflation.
626 add_to_contentions(-1);
627 }
628 return false;
629 }
630 }
631
632 // Sanity checks for the races:
633 guarantee(owner_is_DEFLATER_MARKER(), "must be deflater marker");
634 guarantee(contentions() < 0, "must be negative: contentions=%d",
635 contentions());
636 guarantee(_waiters == 0, "must be 0: waiters=%d", _waiters);
637 guarantee(_cxq == nullptr, "must be no contending threads: cxq="
638 INTPTR_FORMAT, p2i(_cxq));
639 guarantee(_EntryList == nullptr,
640 "must be no entering threads: EntryList=" INTPTR_FORMAT,
641 p2i(_EntryList));
642
643 if (obj != nullptr) {
644 if (log_is_enabled(Trace, monitorinflation)) {
700 log_info(monitorinflation)("install_displaced_markword_in_object: "
701 "failed cas_set_mark: new_mark=" INTPTR_FORMAT
702 ", old_mark=" INTPTR_FORMAT ", res=" INTPTR_FORMAT,
703 dmw.value(), markWord::encode(this).value(),
704 res.value());
705 }
706
707 // Note: It does not matter which thread restored the header/dmw
708 // into the object's header. The thread deflating the monitor just
709 // wanted the object's header restored and it is. The threads that
710 // detected a race with the deflation process also wanted the
711 // object's header restored before they retry their operation and
712 // because it is restored they will only retry once.
713 }
714
715 // Convert the fields used by is_busy() to a string that can be
716 // used for diagnostic output.
717 const char* ObjectMonitor::is_busy_to_string(stringStream* ss) {
718 ss->print("is_busy: waiters=%d"
719 ", contentions=%d"
720 ", owner=" INTPTR_FORMAT
721 ", cxq=" PTR_FORMAT
722 ", EntryList=" PTR_FORMAT,
723 _waiters,
724 (contentions() > 0 ? contentions() : 0),
725 owner_is_DEFLATER_MARKER()
726 // We report null instead of DEFLATER_MARKER here because is_busy()
727 // ignores DEFLATER_MARKER values.
728 ? p2i(nullptr)
729 : p2i(owner_raw()),
730 p2i(_cxq),
731 p2i(_EntryList));
732 return ss->base();
733 }
734
735 #define MAX_RECHECK_INTERVAL 1000
736
737 void ObjectMonitor::EnterI(JavaThread* current) {
738 assert(current->thread_state() == _thread_blocked, "invariant");
739
740 // Try the lock - TATAS
741 if (TryLock(current) == TryLockResult::Success) {
742 assert(_succ != current, "invariant");
743 assert(owner_raw() == owner_for(current), "invariant");
744 assert(_Responsible != current, "invariant");
745 return;
746 }
747
748 if (try_set_owner_from(DEFLATER_MARKER, current) == DEFLATER_MARKER) {
749 // Cancelled the in-progress async deflation by changing owner from
750 // DEFLATER_MARKER to current. As part of the contended enter protocol,
751 // contentions was incremented to a positive value before EnterI()
752 // was called and that prevents the deflater thread from winning the
753 // last part of the 2-part async deflation protocol. After EnterI()
754 // returns to enter(), contentions is decremented because the caller
755 // now owns the monitor. We bump contentions an extra time here to
756 // prevent the deflater thread from winning the last part of the
757 // 2-part async deflation protocol after the regular decrement
758 // occurs in enter(). The deflater thread will decrement contentions
759 // after it recognizes that the async deflation was cancelled.
760 add_to_contentions(1);
761 assert(_succ != current, "invariant");
762 assert(_Responsible != current, "invariant");
763 return;
764 }
765
766 assert(InitDone, "Unexpectedly not initialized");
767
768 // We try one round of spinning *before* enqueueing current.
769 //
770 // If the _owner is ready but OFFPROC we could use a YieldTo()
771 // operation to donate the remainder of this thread's quantum
772 // to the owner. This has subtle but beneficial affinity
773 // effects.
774
775 if (TrySpin(current)) {
776 assert(owner_raw() == owner_for(current), "invariant");
777 assert(_succ != current, "invariant");
778 assert(_Responsible != current, "invariant");
779 return;
780 }
781
782 // The Spin failed -- Enqueue and park the thread ...
783 assert(_succ != current, "invariant");
784 assert(owner_raw() != owner_for(current), "invariant");
785 assert(_Responsible != current, "invariant");
786
787 // Enqueue "current" on ObjectMonitor's _cxq.
788 //
789 // Node acts as a proxy for current.
790 // As an aside, if were to ever rewrite the synchronization code mostly
791 // in Java, WaitNodes, ObjectMonitors, and Events would become 1st-class
792 // Java objects. This would avoid awkward lifecycle and liveness issues,
793 // as well as eliminate a subset of ABA issues.
794 // TODO: eliminate ObjectWaiter and enqueue either Threads or Events.
795
796 ObjectWaiter node(current);
797 current->_ParkEvent->reset();
798 node._prev = (ObjectWaiter*) 0xBAD;
799 node.TState = ObjectWaiter::TS_CXQ;
800
801 // Push "current" onto the front of the _cxq.
802 // Once on cxq/EntryList, current stays on-queue until it acquires the lock.
803 // Note that spinning tends to reduce the rate at which threads
804 // enqueue and dequeue on EntryList|cxq.
805 ObjectWaiter* nxt;
806 for (;;) {
807 node._next = nxt = _cxq;
808 if (Atomic::cmpxchg(&_cxq, nxt, &node) == nxt) break;
809
810 // Interference - the CAS failed because _cxq changed. Just retry.
811 // As an optional optimization we retry the lock.
812 if (TryLock(current) == TryLockResult::Success) {
813 assert(_succ != current, "invariant");
814 assert(owner_raw() == owner_for(current), "invariant");
815 assert(_Responsible != current, "invariant");
816 return;
817 }
818 }
819
820 // Check for cxq|EntryList edge transition to non-null. This indicates
821 // the onset of contention. While contention persists exiting threads
822 // will use a ST:MEMBAR:LD 1-1 exit protocol. When contention abates exit
823 // operations revert to the faster 1-0 mode. This enter operation may interleave
824 // (race) a concurrent 1-0 exit operation, resulting in stranding, so we
825 // arrange for one of the contending thread to use a timed park() operations
826 // to detect and recover from the race. (Stranding is form of progress failure
827 // where the monitor is unlocked but all the contending threads remain parked).
828 // That is, at least one of the contended threads will periodically poll _owner.
829 // One of the contending threads will become the designated "Responsible" thread.
830 // The Responsible thread uses a timed park instead of a normal indefinite park
831 // operation -- it periodically wakes and checks for and recovers from potential
832 // strandings admitted by 1-0 exit operations. We need at most one Responsible
833 // thread per-monitor at any given moment. Only threads on cxq|EntryList may
834 // be responsible for a monitor.
841 // -- the checker -- parked on a timer.
842
843 if (nxt == nullptr && _EntryList == nullptr) {
844 // Try to assume the role of responsible thread for the monitor.
845 // CONSIDER: ST vs CAS vs { if (Responsible==null) Responsible=current }
846 Atomic::replace_if_null(&_Responsible, current);
847 }
848
849 // The lock might have been released while this thread was occupied queueing
850 // itself onto _cxq. To close the race and avoid "stranding" and
851 // progress-liveness failure we must resample-retry _owner before parking.
852 // Note the Dekker/Lamport duality: ST cxq; MEMBAR; LD Owner.
853 // In this case the ST-MEMBAR is accomplished with CAS().
854 //
855 // TODO: Defer all thread state transitions until park-time.
856 // Since state transitions are heavy and inefficient we'd like
857 // to defer the state transitions until absolutely necessary,
858 // and in doing so avoid some transitions ...
859
860 int recheckInterval = 1;
861 bool do_timed_parked = false;
862
863 ContinuationEntry* ce = current->last_continuation();
864 if (ce != nullptr && ce->is_virtual_thread()) {
865 do_timed_parked = true;
866 }
867
868 for (;;) {
869
870 if (TryLock(current) == TryLockResult::Success) {
871 break;
872 }
873 assert(owner_raw() != owner_for(current), "invariant");
874
875 // park self
876 if (_Responsible == current || do_timed_parked) {
877 current->_ParkEvent->park((jlong) recheckInterval);
878 // Increase the recheckInterval, but clamp the value.
879 recheckInterval *= 8;
880 if (recheckInterval > MAX_RECHECK_INTERVAL) {
881 recheckInterval = MAX_RECHECK_INTERVAL;
882 }
883 } else {
884 current->_ParkEvent->park();
885 }
886
887 if (TryLock(current) == TryLockResult::Success) {
888 break;
889 }
890
891 if (try_set_owner_from(DEFLATER_MARKER, current) == DEFLATER_MARKER) {
892 // Cancelled the in-progress async deflation by changing owner from
893 // DEFLATER_MARKER to current. As part of the contended enter protocol,
894 // contentions was incremented to a positive value before EnterI()
895 // was called and that prevents the deflater thread from winning the
896 // last part of the 2-part async deflation protocol. After EnterI()
925 // We can find that we were unpark()ed and redesignated _succ while
926 // we were spinning. That's harmless. If we iterate and call park(),
927 // park() will consume the event and return immediately and we'll
928 // just spin again. This pattern can repeat, leaving _succ to simply
929 // spin on a CPU.
930
931 if (_succ == current) _succ = nullptr;
932
933 // Invariant: after clearing _succ a thread *must* retry _owner before parking.
934 OrderAccess::fence();
935 }
936
937 // Egress :
938 // current has acquired the lock -- Unlink current from the cxq or EntryList.
939 // Normally we'll find current on the EntryList .
940 // From the perspective of the lock owner (this thread), the
941 // EntryList is stable and cxq is prepend-only.
942 // The head of cxq is volatile but the interior is stable.
943 // In addition, current.TState is stable.
944
945 assert(owner_raw() == owner_for(current), "invariant");
946
947 UnlinkAfterAcquire(current, &node);
948 if (_succ == current) _succ = nullptr;
949
950 assert(_succ != current, "invariant");
951 if (_Responsible == current) {
952 _Responsible = nullptr;
953 OrderAccess::fence(); // Dekker pivot-point
954
955 // We may leave threads on cxq|EntryList without a designated
956 // "Responsible" thread. This is benign. When this thread subsequently
957 // exits the monitor it can "see" such preexisting "old" threads --
958 // threads that arrived on the cxq|EntryList before the fence, above --
959 // by LDing cxq|EntryList. Newly arrived threads -- that is, threads
960 // that arrive on cxq after the ST:MEMBAR, above -- will set Responsible
961 // non-null and elect a new "Responsible" timer thread.
962 //
963 // This thread executes:
964 // ST Responsible=null; MEMBAR (in enter epilogue - here)
965 // LD cxq|EntryList (in subsequent exit)
997
998 return;
999 }
1000
1001 // ReenterI() is a specialized inline form of the latter half of the
1002 // contended slow-path from EnterI(). We use ReenterI() only for
1003 // monitor reentry in wait().
1004 //
1005 // In the future we should reconcile EnterI() and ReenterI().
1006
1007 void ObjectMonitor::ReenterI(JavaThread* current, ObjectWaiter* currentNode) {
1008 assert(current != nullptr, "invariant");
1009 assert(currentNode != nullptr, "invariant");
1010 assert(currentNode->_thread == current, "invariant");
1011 assert(_waiters > 0, "invariant");
1012 assert(object()->mark() == markWord::encode(this), "invariant");
1013
1014 assert(current->thread_state() != _thread_blocked, "invariant");
1015
1016 for (;;) {
1017 uint8_t v = currentNode->TState;
1018 guarantee(v == ObjectWaiter::TS_ENTER || v == ObjectWaiter::TS_CXQ, "invariant");
1019 assert(owner_raw() != owner_for(current), "invariant");
1020
1021 // This thread has been notified so try to reacquire the lock.
1022 if (TryLock(current) == TryLockResult::Success) {
1023 break;
1024 }
1025
1026 // If that fails, spin again. Note that spin count may be zero so the above TryLock
1027 // is necessary.
1028 if (TrySpin(current)) {
1029 break;
1030 }
1031
1032 {
1033 OSThreadContendState osts(current->osthread());
1034
1035 assert(current->thread_state() == _thread_in_vm, "invariant");
1036
1037 {
1038 ClearSuccOnSuspend csos(this);
1039 ThreadBlockInVMPreprocess<ClearSuccOnSuspend> tbivs(current, csos, true /* allow_suspend */);
1058 // *must* retry _owner before parking.
1059 OrderAccess::fence();
1060
1061 // Keep a tally of the # of futile wakeups.
1062 // Note that the counter is not protected by a lock or updated by atomics.
1063 // That is by design - we trade "lossy" counters which are exposed to
1064 // races during updates for a lower probe effect.
1065 // This PerfData object can be used in parallel with a safepoint.
1066 // See the work around in PerfDataManager::destroy().
1067 OM_PERFDATA_OP(FutileWakeups, inc());
1068 }
1069
1070 // current has acquired the lock -- Unlink current from the cxq or EntryList .
1071 // Normally we'll find current on the EntryList.
1072 // Unlinking from the EntryList is constant-time and atomic-free.
1073 // From the perspective of the lock owner (this thread), the
1074 // EntryList is stable and cxq is prepend-only.
1075 // The head of cxq is volatile but the interior is stable.
1076 // In addition, current.TState is stable.
1077
1078 assert(owner_raw() == owner_for(current), "invariant");
1079 assert(object()->mark() == markWord::encode(this), "invariant");
1080 UnlinkAfterAcquire(current, currentNode);
1081 if (_succ == current) _succ = nullptr;
1082 assert(_succ != current, "invariant");
1083 currentNode->TState = ObjectWaiter::TS_RUN;
1084 OrderAccess::fence(); // see comments at the end of EnterI()
1085 }
1086
1087 // This method is called from two places:
1088 // - On monitorenter contention with a null waiter.
1089 // - After Object.wait() times out or the target is interrupted to reenter the
1090 // monitor, with the existing waiter.
1091 // For the Object.wait() case we do not delete the ObjectWaiter in case we
1092 // succesfully acquire the monitor since we are going to need it on return.
1093 bool ObjectMonitor::VThreadMonitorEnter(JavaThread* current, ObjectWaiter* waiter) {
1094 if (TryLock(current) == TryLockResult::Success) {
1095 assert(owner_raw() == owner_for(current), "invariant");
1096 assert(_succ != current, "invariant");
1097 assert(_Responsible != current, "invariant");
1098 add_to_contentions(-1);
1099 return true;
1100 }
1101
1102 if (try_set_owner_from(DEFLATER_MARKER, current) == DEFLATER_MARKER) {
1103 // Cancelled the in-progress async deflation by changing owner from
1104 // DEFLATER_MARKER to current. As part of the contended enter protocol,
1105 // contentions was incremented to a positive value before this call to
1106 // VThreadMonitorEnter(). We avoid decrementing contentions to prevent
1107 // the deflater thread from winning the last part of the 2-part async
1108 // deflation protocol. The deflater thread will decrement contentions
1109 // after it recognizes that the async deflation was cancelled.
1110 assert(_succ != current, "invariant");
1111 assert(_Responsible != current, "invariant");
1112 assert(waiter != nullptr, "monitor currently in used marked for deflation??");
1113 return true;
1114 }
1115
1116 oop vthread = current->vthread();
1117 ObjectWaiter* node = waiter != nullptr ? waiter : new ObjectWaiter(vthread, this);
1118 node->_prev = (ObjectWaiter*) 0xBAD;
1119 node->TState = ObjectWaiter::TS_CXQ;
1120
1121 // Push node associated with vthread onto the front of the _cxq.
1122 ObjectWaiter* nxt;
1123 for (;;) {
1124 node->_next = nxt = _cxq;
1125 if (Atomic::cmpxchg(&_cxq, nxt, node) == nxt) break;
1126
1127 // Interference - the CAS failed because _cxq changed. Just retry.
1128 // As an optional optimization we retry the lock.
1129 if (TryLock(current) == TryLockResult::Success) {
1130 assert(owner_raw() == owner_for(current), "invariant");
1131 assert(_succ != current, "invariant");
1132 assert(_Responsible != current, "invariant");
1133 add_to_contentions(-1);
1134 if (waiter == nullptr) delete node; // for Object.wait() don't delete yet
1135 return true;
1136 }
1137 }
1138
1139 // We have to try once more since owner could have exited monitor and checked
1140 // _cxq before we added the node to the queue.
1141 if (TryLock(current) == TryLockResult::Success) {
1142 assert(owner_raw() == owner_for(current), "invariant");
1143 assert(_Responsible != current, "invariant");
1144 UnlinkAfterAcquire(current, node);
1145 if (_succ == (JavaThread*)java_lang_Thread::thread_id(vthread)) _succ = nullptr;
1146 add_to_contentions(-1);
1147 if (waiter == nullptr) delete node; // for Object.wait() don't delete yet
1148 return true;
1149 }
1150
1151 if (nxt == nullptr && _EntryList == nullptr) {
1152 // The C2 unlock() fast path first checks if _cxq and _EntryList are empty and
1153 // if they are it just clears the _owner field. Since we always run the risk of
1154 // having that check happening before we added the node to _cxq and the release
1155 // of the monitor happening after the last TryLock attempt we need to do something
1156 // to avoid stranding. We set the _Responsible field which results in a timed-wait.
1157 if (Atomic::replace_if_null(&_Responsible, (JavaThread*)java_lang_Thread::thread_id(vthread))) {
1158 java_lang_VirtualThread::set_recheckInterval(vthread, 1);
1159 }
1160 }
1161
1162 assert(java_lang_VirtualThread::state(vthread) == java_lang_VirtualThread::RUNNING, "wrong state for vthread");
1163 java_lang_VirtualThread::set_state(vthread, java_lang_VirtualThread::BLOCKING);
1164
1165 // We didn't succeed in acquiring the monitor so save ObjectWaiter*
1166 // in the chunk since we will need it when resuming execution.
1167 oop cont = java_lang_VirtualThread::continuation(vthread);
1168 stackChunkOop chunk = jdk_internal_vm_Continuation::tail(cont);
1169 chunk->set_object_waiter(node);
1170 return false;
1171 }
1172
1173 void ObjectMonitor::resume_operation(JavaThread* current, ObjectWaiter* node) {
1174 assert(java_lang_VirtualThread::state(current->vthread()) == java_lang_VirtualThread::RUNNING, "wrong state for vthread");
1175 assert(current->is_in_VTMS_transition(), "must be");
1176
1177 if (node->is_wait() && !node->at_reenter()) {
1178 bool notified = VThreadWaitReenter(current, node);
1179 if (!notified) return;
1180 // Notified case. We were already added to CXQ or TS_ENTER
1181 // by the notifier so just try to reenter the monitor.
1182 }
1183
1184 // Retry acquiring monitor...
1185
1186 int state = node->TState;
1187 guarantee(state == ObjectWaiter::TS_ENTER || state == ObjectWaiter::TS_CXQ, "invariant");
1188
1189 if (TryLock(current) == TryLockResult::Success) {
1190 VThreadEpilog(current, node);
1191 return;
1192 }
1193
1194 oop vthread = current->vthread();
1195 if (_succ == (JavaThread*)java_lang_Thread::thread_id(vthread)) _succ = nullptr;
1196
1197 // Invariant: after clearing _succ a thread *must* retry _owner before parking.
1198 OrderAccess::fence();
1199
1200 if (TryLock(current) == TryLockResult::Success) {
1201 VThreadEpilog(current, node);
1202 return;
1203 }
1204
1205 // Update recheck interval in case we are the _Responsible.
1206 if (_Responsible == (JavaThread*)java_lang_Thread::thread_id(vthread)) {
1207 int recheckInterval = java_lang_VirtualThread::recheckInterval(vthread);
1208 assert(recheckInterval >= 1 && recheckInterval <= 6, "invariant");
1209 if (recheckInterval < 6) {
1210 recheckInterval++;
1211 java_lang_VirtualThread::set_recheckInterval(vthread, recheckInterval);
1212 }
1213 } else if (java_lang_VirtualThread::recheckInterval(vthread) > 0) {
1214 // No need to do timed park anymore
1215 java_lang_VirtualThread::set_recheckInterval(vthread, 0);
1216 }
1217
1218 // The JT will read this variable on return to the resume_monitor_operation stub
1219 // and will unmount (enterSpecial frame removed and return to Continuation.run()).
1220 current->set_preempting(true);
1221 java_lang_VirtualThread::set_state(vthread, java_lang_VirtualThread::BLOCKING);
1222 }
1223
1224 void ObjectMonitor::VThreadEpilog(JavaThread* current, ObjectWaiter* node) {
1225 assert(owner_raw() == owner_for(current), "invariant");
1226 add_to_contentions(-1);
1227
1228 oop vthread = current->vthread();
1229 if (java_lang_VirtualThread::recheckInterval(vthread) > 0) {
1230 java_lang_VirtualThread::set_recheckInterval(vthread, 0);
1231 }
1232 int64_t threadid = java_lang_Thread::thread_id(vthread);
1233 if (_succ == (JavaThread*)threadid) _succ = nullptr;
1234 if (_Responsible == (JavaThread*)threadid) {
1235 _Responsible = nullptr;
1236 OrderAccess::fence(); // Dekker pivot-point
1237 }
1238
1239 guarantee(_recursions == 0, "invariant");
1240
1241 if (node->is_wait()) {
1242 _recursions = node->_recursions; // restore the old recursion count
1243 _waiters--; // decrement the number of waiters
1244
1245 if (node->_interrupted) {
1246 // We will throw at thaw end after finishing the mount transition.
1247 current->set_pending_interrupted_exception(true);
1248 }
1249 }
1250
1251 assert(node->TState == ObjectWaiter::TS_ENTER || node->TState == ObjectWaiter::TS_CXQ, "");
1252 UnlinkAfterAcquire(current, node);
1253 delete node;
1254
1255 oop cont = java_lang_VirtualThread::continuation(vthread);
1256 stackChunkOop chunk = jdk_internal_vm_Continuation::tail(cont);
1257 chunk->set_object_waiter(nullptr);
1258
1259 if (JvmtiExport::should_post_monitor_contended_entered()) {
1260 // We are going to call thaw again after this and finish the VMTS
1261 // transition so no need to do it here. We will post the event there.
1262 current->set_contended_entered_monitor(this);
1263 }
1264 }
1265
1266 // By convention we unlink a contending thread from EntryList|cxq immediately
1267 // after the thread acquires the lock in ::enter(). Equally, we could defer
1268 // unlinking the thread until ::exit()-time.
1269
1270 void ObjectMonitor::UnlinkAfterAcquire(JavaThread* current, ObjectWaiter* currentNode) {
1271 assert(owner_raw() == owner_for(current), "invariant");
1272 assert((!currentNode->is_vthread() && currentNode->thread() == current) ||
1273 (currentNode->is_vthread() && currentNode->vthread() == current->vthread()), "invariant");
1274
1275 if (currentNode->TState == ObjectWaiter::TS_ENTER) {
1276 // Normal case: remove current from the DLL EntryList .
1277 // This is a constant-time operation.
1278 ObjectWaiter* nxt = currentNode->_next;
1279 ObjectWaiter* prv = currentNode->_prev;
1280 if (nxt != nullptr) nxt->_prev = prv;
1281 if (prv != nullptr) prv->_next = nxt;
1282 if (currentNode == _EntryList) _EntryList = nxt;
1283 assert(nxt == nullptr || nxt->TState == ObjectWaiter::TS_ENTER, "invariant");
1284 assert(prv == nullptr || prv->TState == ObjectWaiter::TS_ENTER, "invariant");
1285 } else {
1286 assert(currentNode->TState == ObjectWaiter::TS_CXQ, "invariant");
1287 // Inopportune interleaving -- current is still on the cxq.
1288 // This usually means the enqueue of self raced an exiting thread.
1289 // Normally we'll find current near the front of the cxq, so
1290 // dequeueing is typically fast. If needbe we can accelerate
1291 // this with some MCS/CHL-like bidirectional list hints and advisory
1292 // back-links so dequeueing from the interior will normally operate
1293 // in constant-time.
1372 // exiting thread will notice and unpark the stranded thread, or, (b)
1373 // the timer expires. If the lock is high traffic then the stranding latency
1374 // will be low due to (a). If the lock is low traffic then the odds of
1375 // stranding are lower, although the worst-case stranding latency
1376 // is longer. Critically, we don't want to put excessive load in the
1377 // platform's timer subsystem. We want to minimize both the timer injection
1378 // rate (timers created/sec) as well as the number of timers active at
1379 // any one time. (more precisely, we want to minimize timer-seconds, which is
1380 // the integral of the # of active timers at any instant over time).
1381 // Both impinge on OS scalability. Given that, at most one thread parked on
1382 // a monitor will use a timer.
1383 //
1384 // There is also the risk of a futile wake-up. If we drop the lock
1385 // another thread can reacquire the lock immediately, and we can
1386 // then wake a thread unnecessarily. This is benign, and we've
1387 // structured the code so the windows are short and the frequency
1388 // of such futile wakups is low.
1389
1390 void ObjectMonitor::exit(JavaThread* current, bool not_suspended) {
1391 void* cur = owner_raw();
1392 if (owner_for(current) != cur) {
1393 // Apparent unbalanced locking ...
1394 // Naively we'd like to throw IllegalMonitorStateException.
1395 // As a practical matter we can neither allocate nor throw an
1396 // exception as ::exit() can be called from leaf routines.
1397 // see x86_32.ad Fast_Unlock() and the I1 and I2 properties.
1398 // Upon deeper reflection, however, in a properly run JVM the only
1399 // way we should encounter this situation is in the presence of
1400 // unbalanced JNI locking. TODO: CheckJNICalls.
1401 // See also: CR4414101
1402 #ifdef ASSERT
1403 LogStreamHandle(Error, monitorinflation) lsh;
1404 lsh.print_cr("ERROR: ObjectMonitor::exit(): thread=" INTPTR_FORMAT
1405 " is exiting an ObjectMonitor it does not own.", p2i(current));
1406 lsh.print_cr("The imbalance is possibly caused by JNI locking.");
1407 print_debug_style_on(&lsh);
1408 assert(false, "Non-balanced monitor enter/exit!");
1409 #endif
1410 return;
1411 }
1412
1413 if (_recursions != 0) {
1414 _recursions--; // this is simple recursive enter
1415 return;
1416 }
1417
1418 // Invariant: after setting Responsible=null an thread must execute
1419 // a MEMBAR or other serializing instruction before fetching EntryList|cxq.
1420 _Responsible = nullptr;
1421
1422 #if INCLUDE_JFR
1423 // get the owner's thread id for the MonitorEnter event
1424 // if it is enabled and the thread isn't suspended
1425 if (not_suspended && EventJavaMonitorEnter::is_enabled()) {
1426 _previous_owner_tid = JFR_THREAD_ID(current);
1427 }
1428 #endif
1429
1430 for (;;) {
1431 assert(owner_for(current) == owner_raw(), "invariant");
1432
1433 // Drop the lock.
1434 // release semantics: prior loads and stores from within the critical section
1435 // must not float (reorder) past the following store that drops the lock.
1436 // Uses a storeload to separate release_store(owner) from the
1437 // successor check. The try_set_owner_from() below uses cmpxchg() so
1438 // we get the fence down there.
1439 release_clear_owner(current);
1440 OrderAccess::storeload();
1441
1442 if ((intptr_t(_EntryList)|intptr_t(_cxq)) == 0 || _succ != nullptr) {
1443 return;
1444 }
1445 // Other threads are blocked trying to acquire the lock.
1446
1447 // Normally the exiting thread is responsible for ensuring succession,
1448 // but if other successors are ready or other entering threads are spinning
1449 // then this thread can simply store null into _owner and exit without
1450 // waking a successor. The existence of spinners or ready successors
1451 // guarantees proper succession (liveness). Responsibility passes to the
1452 // ready or running successors. The exiting thread delegates the duty.
1453 // More precisely, if a successor already exists this thread is absolved
1454 // of the responsibility of waking (unparking) one.
1455 //
1456 // The _succ variable is critical to reducing futile wakeup frequency.
1457 // _succ identifies the "heir presumptive" thread that has been made
1467 // to drop the lock and then spin briefly to see if a spinner managed
1468 // to acquire the lock. If so, the exiting thread could exit
1469 // immediately without waking a successor, otherwise the exiting
1470 // thread would need to dequeue and wake a successor.
1471 // (Note that we'd need to make the post-drop spin short, but no
1472 // shorter than the worst-case round-trip cache-line migration time.
1473 // The dropped lock needs to become visible to the spinner, and then
1474 // the acquisition of the lock by the spinner must become visible to
1475 // the exiting thread).
1476
1477 // It appears that an heir-presumptive (successor) must be made ready.
1478 // Only the current lock owner can manipulate the EntryList or
1479 // drain _cxq, so we need to reacquire the lock. If we fail
1480 // to reacquire the lock the responsibility for ensuring succession
1481 // falls to the new owner.
1482 //
1483 if (try_set_owner_from(nullptr, current) != nullptr) {
1484 return;
1485 }
1486
1487 guarantee(owner_raw() == owner_for(current), "invariant");
1488
1489 ObjectWaiter* w = nullptr;
1490
1491 w = _EntryList;
1492 if (w != nullptr) {
1493 // I'd like to write: guarantee (w->_thread != current).
1494 // But in practice an exiting thread may find itself on the EntryList.
1495 // Let's say thread T1 calls O.wait(). Wait() enqueues T1 on O's waitset and
1496 // then calls exit(). Exit release the lock by setting O._owner to null.
1497 // Let's say T1 then stalls. T2 acquires O and calls O.notify(). The
1498 // notify() operation moves T1 from O's waitset to O's EntryList. T2 then
1499 // release the lock "O". T2 resumes immediately after the ST of null into
1500 // _owner, above. T2 notices that the EntryList is populated, so it
1501 // reacquires the lock and then finds itself on the EntryList.
1502 // Given all that, we have to tolerate the circumstance where "w" is
1503 // associated with current.
1504 assert(w->TState == ObjectWaiter::TS_ENTER, "invariant");
1505 ExitEpilog(current, w);
1506 return;
1507 }
1544 }
1545
1546 // In 1-0 mode we need: ST EntryList; MEMBAR #storestore; ST _owner = nullptr
1547 // The MEMBAR is satisfied by the release_store() operation in ExitEpilog().
1548
1549 // See if we can abdicate to a spinner instead of waking a thread.
1550 // A primary goal of the implementation is to reduce the
1551 // context-switch rate.
1552 if (_succ != nullptr) continue;
1553
1554 w = _EntryList;
1555 if (w != nullptr) {
1556 guarantee(w->TState == ObjectWaiter::TS_ENTER, "invariant");
1557 ExitEpilog(current, w);
1558 return;
1559 }
1560 }
1561 }
1562
1563 void ObjectMonitor::ExitEpilog(JavaThread* current, ObjectWaiter* Wakee) {
1564 assert(owner_raw() == owner_for(current), "invariant");
1565
1566 // Exit protocol:
1567 // 1. ST _succ = wakee
1568 // 2. membar #loadstore|#storestore;
1569 // 2. ST _owner = nullptr
1570 // 3. unpark(wakee)
1571
1572 oop vthread = nullptr;
1573 ParkEvent * Trigger;
1574 if (!Wakee->is_vthread()) {
1575 JavaThread* t = Wakee->thread();
1576 assert(t != nullptr, "");
1577 Trigger = t->_ParkEvent;
1578 _succ = t;
1579 } else {
1580 vthread = Wakee->vthread();
1581 assert(vthread != nullptr, "");
1582 Trigger = ObjectMonitor::vthread_unparker_ParkEvent();
1583 _succ = (JavaThread*)java_lang_Thread::thread_id(vthread);
1584 }
1585
1586 // Hygiene -- once we've set _owner = nullptr we can't safely dereference Wakee again.
1587 // The thread associated with Wakee may have grabbed the lock and "Wakee" may be
1588 // out-of-scope (non-extant).
1589 Wakee = nullptr;
1590
1591 // Drop the lock.
1592 // Uses a fence to separate release_store(owner) from the LD in unpark().
1593 release_clear_owner(current);
1594 OrderAccess::fence();
1595
1596 DTRACE_MONITOR_PROBE(contended__exit, this, object(), current);
1597
1598 if (vthread == nullptr) {
1599 // Platform thread case
1600 Trigger->unpark();
1601 } else if (java_lang_VirtualThread::set_onWaitingList(vthread, _vthread_cxq_head)) {
1602 Trigger->unpark();
1603 }
1604
1605 // Maintain stats and report events to JVMTI
1606 OM_PERFDATA_OP(Parks, inc());
1607 }
1608
1609 // complete_exit exits a lock returning recursion count
1610 // complete_exit requires an inflated monitor
1611 // The _owner field is not always the Thread addr even with an
1612 // inflated monitor, e.g. the monitor can be inflated by a non-owning
1613 // thread due to contention.
1614 intx ObjectMonitor::complete_exit(JavaThread* current) {
1615 assert(InitDone, "Unexpectedly not initialized");
1616
1617 void* cur = owner_raw();
1618 if (owner_for(current) != cur) {
1619 if (LockingMode == LM_LEGACY && is_stack_locker(current)) {
1620 assert(_recursions == 0, "internal state error");
1621 set_owner_from_BasicLock(current); // Convert from BasicLock* to Thread*.
1622 _recursions = 0;
1623 }
1624 }
1625
1626 guarantee(owner_for(current) == owner_raw(), "complete_exit not owner");
1627 intx save = _recursions; // record the old recursion count
1628 _recursions = 0; // set the recursion level to be 0
1629 exit(current); // exit the monitor
1630 guarantee(owner_raw() != owner_for(current), "invariant");
1631 return save;
1632 }
1633
1634 // Checks that the current THREAD owns this monitor and causes an
1635 // immediate return if it doesn't. We don't use the CHECK macro
1636 // because we want the IMSE to be the only exception that is thrown
1637 // from the call site when false is returned. Any other pending
1638 // exception is ignored.
1639 #define CHECK_OWNER() \
1640 do { \
1641 if (!check_owner(THREAD)) { \
1642 assert(HAS_PENDING_EXCEPTION, "expected a pending IMSE here."); \
1643 return; \
1644 } \
1645 } while (false)
1646
1647 // Returns true if the specified thread owns the ObjectMonitor.
1648 // Otherwise returns false and throws IllegalMonitorStateException
1649 // (IMSE). If there is a pending exception and the specified thread
1650 // is not the owner, that exception will be replaced by the IMSE.
1651 bool ObjectMonitor::check_owner(TRAPS) {
1652 JavaThread* current = THREAD;
1653 void* cur = owner_raw();
1654 if (cur == owner_for(current)) {
1655 return true;
1656 }
1657 THROW_MSG_(vmSymbols::java_lang_IllegalMonitorStateException(),
1658 "current thread is not owner", false);
1659 }
1660
1661 static inline bool is_excluded(const Klass* monitor_klass) {
1662 assert(monitor_klass != nullptr, "invariant");
1663 NOT_JFR_RETURN_(false);
1664 JFR_ONLY(return vmSymbols::jdk_jfr_internal_management_HiddenWait() == monitor_klass->name();)
1665 }
1666
1667 static void post_monitor_wait_event(EventJavaMonitorWait* event,
1668 ObjectMonitor* monitor,
1669 uint64_t notifier_tid,
1670 jlong timeout,
1671 bool timedout) {
1672 assert(event != nullptr, "invariant");
1673 assert(monitor != nullptr, "invariant");
1674 const Klass* monitor_klass = monitor->object()->klass();
1675 if (is_excluded(monitor_klass)) {
1676 return;
1677 }
1678 event->set_monitorClass(monitor_klass);
1679 event->set_timeout(timeout);
1680 // Set an address that is 'unique enough', such that events close in
1681 // time and with the same address are likely (but not guaranteed) to
1682 // belong to the same object.
1683 event->set_address((uintptr_t)monitor);
1684 event->set_notifier(notifier_tid);
1685 event->set_timedOut(timedout);
1686 event->commit();
1687 }
1688
1689 static void vthread_monitor_waited_event(JavaThread *current, ObjectWaiter* node, EventJavaMonitorWait* event, jboolean timed_out) {
1690 // Since we might safepoint set the anchor so that the stack can we walked.
1691 assert(current->last_continuation() != nullptr, "");
1692 JavaFrameAnchor* anchor = current->frame_anchor();
1693 anchor->set_last_Java_sp(current->last_continuation()->entry_sp());
1694 anchor->set_last_Java_pc(current->last_continuation()->entry_pc());
1695
1696 JRT_BLOCK
1697 if (event->should_commit()) {
1698 long timeout = java_lang_VirtualThread::waitTimeout(current->vthread());
1699 post_monitor_wait_event(event, node->_monitor, node->_notifier_tid, timeout, timed_out);
1700 }
1701 if (JvmtiExport::should_post_monitor_waited()) {
1702 JvmtiExport::vthread_post_monitor_waited(current, node->_monitor, timed_out);
1703 }
1704 JRT_BLOCK_END
1705 current->frame_anchor()->clear();
1706 }
1707
1708 // -----------------------------------------------------------------------------
1709 // Wait/Notify/NotifyAll
1710 //
1711 // Note: a subset of changes to ObjectMonitor::wait()
1712 // will need to be replicated in complete_exit
1713 void ObjectMonitor::wait(jlong millis, bool interruptible, TRAPS) {
1714 JavaThread* current = THREAD;
1715
1716 assert(InitDone, "Unexpectedly not initialized");
1717
1718 CHECK_OWNER(); // Throws IMSE if not owner.
1719
1720 EventJavaMonitorWait event;
1721
1722 // check for a pending interrupt
1723 if (interruptible && current->is_interrupted(true) && !HAS_PENDING_EXCEPTION) {
1724 // post monitor waited event. Note that this is past-tense, we are done waiting.
1725 if (JvmtiExport::should_post_monitor_waited()) {
1726 // Note: 'false' parameter is passed here because the
1727 // wait was not timed out due to thread interrupt.
1728 JvmtiExport::post_monitor_waited(current, this, false);
1729
1730 // In this short circuit of the monitor wait protocol, the
1731 // current thread never drops ownership of the monitor and
1732 // never gets added to the wait queue so the current thread
1733 // cannot be made the successor. This means that the
1734 // JVMTI_EVENT_MONITOR_WAITED event handler cannot accidentally
1735 // consume an unpark() meant for the ParkEvent associated with
1736 // this ObjectMonitor.
1737 }
1738 if (event.should_commit()) {
1739 post_monitor_wait_event(&event, this, 0, millis, false);
1740 }
1741 THROW(vmSymbols::java_lang_InterruptedException());
1742 return;
1743 }
1744
1745 current->set_current_waiting_monitor(this);
1746
1747 #ifdef LOOM_MONITOR_SUPPORT
1748 ContinuationEntry* ce = current->last_continuation();
1749 if (interruptible && ce != nullptr && ce->is_virtual_thread()) {
1750 int result = Continuation::try_preempt(current, ce->cont_oop(current), freeze_on_wait);
1751 if (result == freeze_ok) {
1752 VThreadWait(current, millis);
1753 current->set_current_waiting_monitor(nullptr);
1754 return;
1755 }
1756 if (result == freeze_pinned_native) {
1757 const Klass* monitor_klass = object()->klass();
1758 if (!is_excluded(monitor_klass)) {
1759 post_virtual_thread_pinned_event(current, "Native frame or <clinit> on stack");
1760 }
1761 }
1762 }
1763 #endif
1764
1765 // create a node to be put into the queue
1766 // Critically, after we reset() the event but prior to park(), we must check
1767 // for a pending interrupt.
1768 ObjectWaiter node(current);
1769 node.TState = ObjectWaiter::TS_WAIT;
1770 current->_ParkEvent->reset();
1771 OrderAccess::fence(); // ST into Event; membar ; LD interrupted-flag
1772
1773 // Enter the waiting queue, which is a circular doubly linked list in this case
1774 // but it could be a priority queue or any data structure.
1775 // _WaitSetLock protects the wait queue. Normally the wait queue is accessed only
1776 // by the owner of the monitor *except* in the case where park()
1777 // returns because of a timeout of interrupt. Contention is exceptionally rare
1778 // so we use a simple spin-lock instead of a heavier-weight blocking lock.
1779
1780 Thread::SpinAcquire(&_WaitSetLock, "WaitSet - add");
1781 AddWaiter(&node);
1782 Thread::SpinRelease(&_WaitSetLock);
1783
1784 _Responsible = nullptr;
1785
1786 intx save = _recursions; // record the old recursion count
1787 _waiters++; // increment the number of waiters
1788 _recursions = 0; // set the recursion level to be 1
1789 exit(current); // exit the monitor
1790 guarantee(owner_raw() != owner_for(current), "invariant");
1791
1792 // The thread is on the WaitSet list - now park() it.
1793 // On MP systems it's conceivable that a brief spin before we park
1794 // could be profitable.
1795 //
1796 // TODO-FIXME: change the following logic to a loop of the form
1797 // while (!timeout && !interrupted && _notified == 0) park()
1798
1799 int ret = OS_OK;
1800 int WasNotified = 0;
1801
1802 // Need to check interrupt state whilst still _thread_in_vm
1803 bool interrupted = interruptible && current->is_interrupted(false);
1804
1805 { // State transition wrappers
1806 OSThread* osthread = current->osthread();
1807 OSThreadWaitState osts(osthread, true);
1808
1809 assert(current->thread_state() == _thread_in_vm, "invariant");
1810
1811 {
1812 ClearSuccOnSuspend csos(this);
1813 ThreadBlockInVMPreprocess<ClearSuccOnSuspend> tbivs(current, csos, true /* allow_suspend */);
1814 if (interrupted || HAS_PENDING_EXCEPTION) {
1815 // Intentionally empty
1816 } else if (!node._notified) {
1817 if (millis <= 0) {
1818 current->_ParkEvent->park();
1819 } else {
1820 ret = current->_ParkEvent->park(millis);
1821 }
1822 }
1823 }
1824
1825 // Node may be on the WaitSet, the EntryList (or cxq), or in transition
1826 // from the WaitSet to the EntryList.
1827 // See if we need to remove Node from the WaitSet.
1828 // We use double-checked locking to avoid grabbing _WaitSetLock
1829 // if the thread is not on the wait queue.
1830 //
1831 // Note that we don't need a fence before the fetch of TState.
1832 // In the worst case we'll fetch a old-stale value of TS_WAIT previously
1833 // written by the is thread. (perhaps the fetch might even be satisfied
1834 // by a look-aside into the processor's own store buffer, although given
1835 // the length of the code path between the prior ST and this load that's
1836 // highly unlikely). If the following LD fetches a stale TS_WAIT value
1837 // then we'll acquire the lock and then re-fetch a fresh TState value.
1838 // That is, we fail toward safety.
1839
1840 if (node.TState == ObjectWaiter::TS_WAIT) {
1841 Thread::SpinAcquire(&_WaitSetLock, "WaitSet - unlink");
1842 if (node.TState == ObjectWaiter::TS_WAIT) {
1843 DequeueSpecificWaiter(&node); // unlink from WaitSet
1844 assert(!node._notified, "invariant");
1845 node.TState = ObjectWaiter::TS_RUN;
1846 }
1847 Thread::SpinRelease(&_WaitSetLock);
1848 }
1849
1850 // The thread is now either on off-list (TS_RUN),
1851 // on the EntryList (TS_ENTER), or on the cxq (TS_CXQ).
1852 // The Node's TState variable is stable from the perspective of this thread.
1853 // No other threads will asynchronously modify TState.
1854 guarantee(node.TState != ObjectWaiter::TS_WAIT, "invariant");
1855 OrderAccess::loadload();
1856 if (_succ == current) _succ = nullptr;
1857 WasNotified = node._notified;
1858
1859 // Reentry phase -- reacquire the monitor.
1860 // re-enter contended monitor after object.wait().
1861 // retain OBJECT_WAIT state until re-enter successfully completes
1862 // Thread state is thread_in_vm and oop access is again safe,
1863 // although the raw address of the object may have changed.
1864 // (Don't cache naked oops over safepoints, of course).
1865
1866 // post monitor waited event. Note that this is past-tense, we are done waiting.
1867 if (JvmtiExport::should_post_monitor_waited()) {
1868 JvmtiExport::post_monitor_waited(current, this, ret == OS_TIMEOUT);
1869
1870 if (node._notified && _succ == current) {
1871 // In this part of the monitor wait-notify-reenter protocol it
1872 // is possible (and normal) for another thread to do a fastpath
1873 // monitor enter-exit while this thread is still trying to get
1874 // to the reenter portion of the protocol.
1875 //
1876 // The ObjectMonitor was notified and the current thread is
1877 // the successor which also means that an unpark() has already
1878 // been done. The JVMTI_EVENT_MONITOR_WAITED event handler can
1879 // consume the unpark() that was done when the successor was
1880 // set because the same ParkEvent is shared between Java
1881 // monitors and JVM/TI RawMonitors (for now).
1882 //
1883 // We redo the unpark() to ensure forward progress, i.e., we
1884 // don't want all pending threads hanging (parked) with none
1885 // entering the unlocked monitor.
1886 current->_ParkEvent->unpark();
1887 }
1888 }
1889
1890 if (event.should_commit()) {
1891 post_monitor_wait_event(&event, this, node._notifier_tid, millis, ret == OS_TIMEOUT);
1892 }
1893
1894 OrderAccess::fence();
1895
1896 assert(owner_raw() != owner_for(current), "invariant");
1897 ObjectWaiter::TStates v = node.TState;
1898 if (v == ObjectWaiter::TS_RUN) {
1899 enter(current);
1900 } else {
1901 guarantee(v == ObjectWaiter::TS_ENTER || v == ObjectWaiter::TS_CXQ, "invariant");
1902 ReenterI(current, &node);
1903 node.wait_reenter_end(this);
1904 }
1905
1906 // current has reacquired the lock.
1907 // Lifecycle - the node representing current must not appear on any queues.
1908 // Node is about to go out-of-scope, but even if it were immortal we wouldn't
1909 // want residual elements associated with this thread left on any lists.
1910 guarantee(node.TState == ObjectWaiter::TS_RUN, "invariant");
1911 assert(owner_raw() == owner_for(current), "invariant");
1912 assert(_succ != current, "invariant");
1913 } // OSThreadWaitState()
1914
1915 current->set_current_waiting_monitor(nullptr);
1916
1917 guarantee(_recursions == 0, "invariant");
1918 int relock_count = JvmtiDeferredUpdates::get_and_reset_relock_count_after_wait(current);
1919 _recursions = save // restore the old recursion count
1920 + relock_count; // increased by the deferred relock count
1921 NOT_LOOM_MONITOR_SUPPORT(current->inc_held_monitor_count(relock_count);) // Deopt never entered these counts.
1922 _waiters--; // decrement the number of waiters
1923
1924 // Verify a few postconditions
1925 assert(owner_raw() == owner_for(current), "invariant");
1926 assert(_succ != current, "invariant");
1927 assert(object()->mark() == markWord::encode(this), "invariant");
1928
1929 // check if the notification happened
1930 if (!WasNotified) {
1931 // no, it could be timeout or Thread.interrupt() or both
1932 // check for interrupt event, otherwise it is timeout
1933 if (interruptible && current->is_interrupted(true) && !HAS_PENDING_EXCEPTION) {
1934 THROW(vmSymbols::java_lang_InterruptedException());
1935 }
1936 }
1937
1938 // NOTE: Spurious wake up will be consider as timeout.
1939 // Monitor notify has precedence over thread interrupt.
1940 }
1941
1942 // Consider:
1943 // If the lock is cool (cxq == null && succ == null) and we're on an MP system
1944 // then instead of transferring a thread from the WaitSet to the EntryList
1945 // we might just dequeue a thread from the WaitSet and directly unpark() it.
1946
1947 void ObjectMonitor::INotify(JavaThread* current) {
1948 Thread::SpinAcquire(&_WaitSetLock, "WaitSet - notify");
1949 ObjectWaiter* iterator = DequeueWaiter();
1950 if (iterator != nullptr) {
1951 guarantee(iterator->TState == ObjectWaiter::TS_WAIT, "invariant");
1952 guarantee(!iterator->_notified, "invariant");
1953 // Disposition - what might we do with iterator ?
1954 // a. add it directly to the EntryList - either tail (policy == 1)
1955 // or head (policy == 0).
1956 // b. push it onto the front of the _cxq (policy == 2).
1957 // For now we use (b).
1958
1959 if (iterator->is_vthread()) {
1960 oop vthread = iterator->vthread();
1961 java_lang_VirtualThread::set_notified(vthread, true);
1962 int old_state = java_lang_VirtualThread::state(vthread);
1963 // If state is not WAIT/TIMED_WAIT then target could still be on
1964 // unmount transition, or wait could have already timed-out or target
1965 // could have been interrupted. In the first case, the target itself
1966 // will set the state to BLOCKED at the end of the unmount transition.
1967 // In the other cases the target would have been already unblocked so
1968 // there is nothing to do.
1969 if (old_state == java_lang_VirtualThread::WAIT ||
1970 old_state == java_lang_VirtualThread::TIMED_WAIT) {
1971 java_lang_VirtualThread::cmpxchg_state(vthread, old_state, java_lang_VirtualThread::BLOCKED);
1972 }
1973 }
1974
1975 iterator->TState = ObjectWaiter::TS_ENTER;
1976
1977 iterator->_notified = true;
1978 iterator->_notifier_tid = JFR_THREAD_ID(current);
1979
1980 ObjectWaiter* list = _EntryList;
1981 if (list != nullptr) {
1982 assert(list->_prev == nullptr, "invariant");
1983 assert(list->TState == ObjectWaiter::TS_ENTER, "invariant");
1984 assert(list != iterator, "invariant");
1985 }
1986
1987 // prepend to cxq
1988 if (list == nullptr) {
1989 iterator->_next = iterator->_prev = nullptr;
1990 _EntryList = iterator;
1991 } else {
1992 iterator->TState = ObjectWaiter::TS_CXQ;
1993 for (;;) {
1994 ObjectWaiter* front = _cxq;
1995 iterator->_next = front;
1996 if (Atomic::cmpxchg(&_cxq, front, iterator) == front) {
1997 break;
1998 }
1999 }
2000 }
2001
2002 // _WaitSetLock protects the wait queue, not the EntryList. We could
2003 // move the add-to-EntryList operation, above, outside the critical section
2004 // protected by _WaitSetLock. In practice that's not useful. With the
2005 // exception of wait() timeouts and interrupts the monitor owner
2006 // is the only thread that grabs _WaitSetLock. There's almost no contention
2007 // on _WaitSetLock so it's not profitable to reduce the length of the
2008 // critical section.
2009 if (!iterator->is_vthread()) {
2010 iterator->wait_reenter_begin(this);
2011 }
2012 }
2013 Thread::SpinRelease(&_WaitSetLock);
2014 }
2015
2016 // Consider: a not-uncommon synchronization bug is to use notify() when
2017 // notifyAll() is more appropriate, potentially resulting in stranded
2018 // threads; this is one example of a lost wakeup. A useful diagnostic
2019 // option is to force all notify() operations to behave as notifyAll().
2020 //
2021 // Note: We can also detect many such problems with a "minimum wait".
2022 // When the "minimum wait" is set to a small non-zero timeout value
2023 // and the program does not hang whereas it did absent "minimum wait",
2024 // that suggests a lost wakeup bug.
2025
2026 void ObjectMonitor::notify(TRAPS) {
2027 JavaThread* current = THREAD;
2028 CHECK_OWNER(); // Throws IMSE if not owner.
2029 if (_WaitSet == nullptr) {
2030 return;
2031 }
2042 // waitset is "ABCD" and the EntryList is "XYZ". After a notifyAll() in prepend
2043 // mode the waitset will be empty and the EntryList will be "DCBAXYZ".
2044
2045 void ObjectMonitor::notifyAll(TRAPS) {
2046 JavaThread* current = THREAD;
2047 CHECK_OWNER(); // Throws IMSE if not owner.
2048 if (_WaitSet == nullptr) {
2049 return;
2050 }
2051
2052 DTRACE_MONITOR_PROBE(notifyAll, this, object(), current);
2053 int tally = 0;
2054 while (_WaitSet != nullptr) {
2055 tally++;
2056 INotify(current);
2057 }
2058
2059 OM_PERFDATA_OP(Notifications, inc(tally));
2060 }
2061
2062 void ObjectMonitor::VThreadWait(JavaThread* current, jlong millis) {
2063 oop vthread = current->vthread();
2064 ObjectWaiter* node = new ObjectWaiter(vthread, this);
2065 node->_is_wait = true;
2066 node->TState = ObjectWaiter::TS_WAIT;
2067 java_lang_VirtualThread::set_notified(vthread, false); // Reset notified flag
2068
2069 // Enter the waiting queue, which is a circular doubly linked list in this case
2070 // but it could be a priority queue or any data structure.
2071 // _WaitSetLock protects the wait queue. Normally the wait queue is accessed only
2072 // by the owner of the monitor *except* in the case where park()
2073 // returns because of a timeout or interrupt. Contention is exceptionally rare
2074 // so we use a simple spin-lock instead of a heavier-weight blocking lock.
2075
2076 Thread::SpinAcquire(&_WaitSetLock, "WaitSet - add");
2077 AddWaiter(node);
2078 Thread::SpinRelease(&_WaitSetLock);
2079
2080 _Responsible = nullptr;
2081
2082 node->_recursions = _recursions; // record the old recursion count
2083 _recursions = 0; // set the recursion level to be 1
2084 _waiters++; // increment the number of waiters
2085 exit(current); // exit the monitor
2086 guarantee(owner_raw() != owner_for(current), "invariant");
2087
2088 assert(java_lang_VirtualThread::state(vthread) == java_lang_VirtualThread::RUNNING, "wrong state for vthread");
2089 java_lang_VirtualThread::set_state(vthread, millis == 0 ? java_lang_VirtualThread::WAITING : java_lang_VirtualThread::TIMED_WAITING);
2090 java_lang_VirtualThread::set_waitTimeout(vthread, millis);
2091
2092 // Save the ObjectWaiter* in the chunk since we will need it
2093 // when resuming execution.
2094 oop cont = java_lang_VirtualThread::continuation(vthread);
2095 stackChunkOop chunk = jdk_internal_vm_Continuation::tail(cont);
2096 chunk->set_object_waiter(node);
2097 }
2098
2099 bool ObjectMonitor::VThreadWaitReenter(JavaThread* current, ObjectWaiter* node) {
2100 // First time we run after being preempted on Object.wait().
2101 // We need to check if we were interrupted or wait() timed-out
2102 // and in that case remove ourselves from the _WaitSet queue.
2103 if (node->TState == ObjectWaiter::TS_WAIT) {
2104 Thread::SpinAcquire(&_WaitSetLock, "WaitSet - unlink");
2105 if (node->TState == ObjectWaiter::TS_WAIT) {
2106 DequeueSpecificWaiter(node); // unlink from WaitSet
2107 assert(!node->_notified, "invariant");
2108 node->TState = ObjectWaiter::TS_RUN;
2109 }
2110 Thread::SpinRelease(&_WaitSetLock);
2111 }
2112
2113 ObjectWaiter::TStates state = node->TState;
2114 bool was_notified = state == ObjectWaiter::TS_ENTER || state == ObjectWaiter::TS_CXQ;
2115 assert(was_notified || state == ObjectWaiter::TS_RUN, "");
2116
2117 // save it so that once we re-acquire the monitor we know if we need to throw IE.
2118 node->_interrupted = !was_notified && current->is_interrupted(false);
2119
2120 EventJavaMonitorWait event;
2121 if (event.should_commit() || JvmtiExport::should_post_monitor_waited()) {
2122 vthread_monitor_waited_event(current, node, &event, !was_notified && !node->_interrupted);
2123 }
2124
2125 node->_at_reenter = true;
2126 add_to_contentions(1);
2127 assert(owner_raw() != owner_for(current), "invariant");
2128
2129 if (!was_notified) {
2130 bool acquired = VThreadMonitorEnter(current, node);
2131 if (acquired) {
2132 guarantee(_recursions == 0, "invariant");
2133 _recursions = node->_recursions; // restore the old recursion count
2134 _waiters--; // decrement the number of waiters
2135
2136 if (node->_interrupted) {
2137 // We will throw at thaw end after finishing the mount transition.
2138 current->set_pending_interrupted_exception(true);
2139 }
2140
2141 delete node;
2142 oop cont = java_lang_VirtualThread::continuation(current->vthread());
2143 stackChunkOop chunk = jdk_internal_vm_Continuation::tail(cont);
2144 chunk->set_object_waiter(nullptr);
2145 } else {
2146 // The JT will read this variable on return to the resume_monitor_operation stub
2147 // and will unmount (enterSpecial frame removed and return to Continuation.run()).
2148 current->set_preempting(true);
2149 }
2150 }
2151 return was_notified;
2152 }
2153
2154 // -----------------------------------------------------------------------------
2155 // Adaptive Spinning Support
2156 //
2157 // Adaptive spin-then-block - rational spinning
2158 //
2159 // Note that we spin "globally" on _owner with a classic SMP-polite TATAS
2160 // algorithm. On high order SMP systems it would be better to start with
2161 // a brief global spin and then revert to spinning locally. In the spirit of MCS/CLH,
2162 // a contending thread could enqueue itself on the cxq and then spin locally
2163 // on a thread-specific variable such as its ParkEvent._Event flag.
2164 // That's left as an exercise for the reader. Note that global spinning is
2165 // not problematic on Niagara, as the L2 cache serves the interconnect and
2166 // has both low latency and massive bandwidth.
2167 //
2168 // Broadly, we can fix the spin frequency -- that is, the % of contended lock
2169 // acquisition attempts where we opt to spin -- at 100% and vary the spin count
2170 // (duration) or we can fix the count at approximately the duration of
2171 // a context switch and vary the frequency. Of course we could also
2172 // vary both satisfying K == Frequency * Duration, where K is adaptive by monitor.
2173 // For a description of 'Adaptive spin-then-block mutual exclusion in
2290 }
2291
2292 //
2293 // Consider the following alternative:
2294 // Periodically set _SpinDuration = _SpinLimit and try a long/full
2295 // spin attempt. "Periodically" might mean after a tally of
2296 // the # of failed spin attempts (or iterations) reaches some threshold.
2297 // This takes us into the realm of 1-out-of-N spinning, where we
2298 // hold the duration constant but vary the frequency.
2299
2300 int ctr = _SpinDuration;
2301 if (ctr <= 0) return false;
2302
2303 // We're good to spin ... spin ingress.
2304 // CONSIDER: use Prefetch::write() to avoid RTS->RTO upgrades
2305 // when preparing to LD...CAS _owner, etc and the CAS is likely
2306 // to succeed.
2307 if (_succ == nullptr) {
2308 _succ = current;
2309 }
2310 void* prv = nullptr;
2311
2312 // There are three ways to exit the following loop:
2313 // 1. A successful spin where this thread has acquired the lock.
2314 // 2. Spin failure with prejudice
2315 // 3. Spin failure without prejudice
2316
2317 while (--ctr >= 0) {
2318
2319 // Periodic polling -- Check for pending GC
2320 // Threads may spin while they're unsafe.
2321 // We don't want spinning threads to delay the JVM from reaching
2322 // a stop-the-world safepoint or to steal cycles from GC.
2323 // If we detect a pending safepoint we abort in order that
2324 // (a) this thread, if unsafe, doesn't delay the safepoint, and (b)
2325 // this thread, if safe, doesn't steal cycles from GC.
2326 // This is in keeping with the "no loitering in runtime" rule.
2327 // We periodically check to see if there's a safepoint pending.
2328 if ((ctr & 0xFF) == 0) {
2329 // Can't call SafepointMechanism::should_process() since that
2330 // might update the poll values and we could be in a thread_blocked
2331 // state here which is not allowed so just check the poll.
2332 if (SafepointMechanism::local_poll_armed(current)) {
2333 break;
2334 }
2335 SpinPause();
2336 }
2337
2338 // Probe _owner with TATAS
2339 // If this thread observes the monitor transition or flicker
2340 // from locked to unlocked to locked, then the odds that this
2341 // thread will acquire the lock in this spin attempt go down
2342 // considerably. The same argument applies if the CAS fails
2343 // or if we observe _owner change from one non-null value to
2344 // another non-null value. In such cases we might abort
2345 // the spin without prejudice or apply a "penalty" to the
2346 // spin count-down variable "ctr", reducing it by 100, say.
2347
2348 void* ox = owner_raw();
2349 if (ox == nullptr) {
2350 ox = try_set_owner_from(nullptr, current);
2351 if (ox == nullptr) {
2352 // The CAS succeeded -- this thread acquired ownership
2353 // Take care of some bookkeeping to exit spin state.
2354 if (_succ == current) {
2355 _succ = nullptr;
2356 }
2357
2358 // Increase _SpinDuration :
2359 // The spin was successful (profitable) so we tend toward
2360 // longer spin attempts in the future.
2361 // CONSIDER: factor "ctr" into the _SpinDuration adjustment.
2362 // If we acquired the lock early in the spin cycle it
2363 // makes sense to increase _SpinDuration proportionally.
2364 // Note that we don't clamp SpinDuration precisely at SpinLimit.
2365 _SpinDuration = adjust_up(_SpinDuration);
2366 return true;
2367 }
2368
2369 // The CAS failed ... we can take any of the following actions:
2370 // * penalize: ctr -= CASPenalty
2395 // Invariant: after setting succ=null a contending thread
2396 // must recheck-retry _owner before parking. This usually happens
2397 // in the normal usage of TrySpin(), but it's safest
2398 // to make TrySpin() as foolproof as possible.
2399 OrderAccess::fence();
2400 if (TryLock(current) == TryLockResult::Success) {
2401 return true;
2402 }
2403 }
2404
2405 return false;
2406 }
2407
2408
2409 // -----------------------------------------------------------------------------
2410 // WaitSet management ...
2411
2412 ObjectWaiter::ObjectWaiter(JavaThread* current) {
2413 _next = nullptr;
2414 _prev = nullptr;
2415 _thread = current;
2416 _monitor = nullptr;
2417 _notifier_tid = 0;
2418 _recursions = 0;
2419 TState = TS_RUN;
2420 _notified = false;
2421 _is_wait = false;
2422 _at_reenter = false;
2423 _interrupted = false;
2424 _active = false;
2425 }
2426
2427 ObjectWaiter::ObjectWaiter(oop vthread, ObjectMonitor* mon) : ObjectWaiter(nullptr) {
2428 assert(oopDesc::is_oop(vthread), "");
2429 _vthread = OopHandle(JavaThread::thread_oop_storage(), vthread);
2430 _monitor = mon;
2431 }
2432
2433 ObjectWaiter::~ObjectWaiter() {
2434 if (is_vthread()) {
2435 assert(vthread() != nullptr, "");
2436 _vthread.release(JavaThread::thread_oop_storage());
2437 }
2438 }
2439
2440 oop ObjectWaiter::vthread() {
2441 return _vthread.resolve();
2442 }
2443
2444 void ObjectWaiter::wait_reenter_begin(ObjectMonitor * const mon) {
2445 _active = JavaThreadBlockedOnMonitorEnterState::wait_reenter_begin(_thread, mon);
2446 }
2447
2448 void ObjectWaiter::wait_reenter_end(ObjectMonitor * const mon) {
2449 JavaThreadBlockedOnMonitorEnterState::wait_reenter_end(_thread, _active);
2450 }
2451
2452 inline void ObjectMonitor::AddWaiter(ObjectWaiter* node) {
2453 assert(node != nullptr, "should not add null node");
2454 assert(node->_prev == nullptr, "node already in list");
2455 assert(node->_next == nullptr, "node already in list");
2456 // put node at end of queue (circular doubly linked list)
2457 if (_WaitSet == nullptr) {
2458 _WaitSet = node;
2459 node->_prev = node;
2460 node->_next = node;
2461 } else {
2539 { \
2540 n = PerfDataManager::create_variable(SUN_RT, #n, PerfData::U_Events, \
2541 CHECK); \
2542 }
2543 NEWPERFCOUNTER(_sync_Inflations);
2544 NEWPERFCOUNTER(_sync_Deflations);
2545 NEWPERFCOUNTER(_sync_ContendedLockAttempts);
2546 NEWPERFCOUNTER(_sync_FutileWakeups);
2547 NEWPERFCOUNTER(_sync_Parks);
2548 NEWPERFCOUNTER(_sync_Notifications);
2549 NEWPERFVARIABLE(_sync_MonExtant);
2550 #undef NEWPERFCOUNTER
2551 #undef NEWPERFVARIABLE
2552 }
2553
2554 _oop_storage = OopStorageSet::create_weak("ObjectSynchronizer Weak", mtSynchronizer);
2555
2556 DEBUG_ONLY(InitDone = true;)
2557 }
2558
2559 void ObjectMonitor::Initialize2() {
2560 _vthread_cxq_head = OopHandle(JavaThread::thread_oop_storage(), nullptr);
2561 _vthread_unparker_ParkEvent = ParkEvent::Allocate(nullptr);
2562 }
2563
2564 void ObjectMonitor::print_on(outputStream* st) const {
2565 // The minimal things to print for markWord printing, more can be added for debugging and logging.
2566 st->print("{contentions=0x%08x,waiters=0x%08x"
2567 ",recursions=" INTX_FORMAT ",owner=" INTPTR_FORMAT "}",
2568 contentions(), waiters(), recursions(),
2569 p2i(owner()));
2570 }
2571 void ObjectMonitor::print() const { print_on(tty); }
2572
2573 #ifdef ASSERT
2574 // Print the ObjectMonitor like a debugger would:
2575 //
2576 // (ObjectMonitor) 0x00007fdfb6012e40 = {
2577 // _header = 0x0000000000000001
2578 // _object = 0x000000070ff45fd0
2579 // _pad_buf0 = {
2580 // [0] = '\0'
2581 // ...
2582 // [43] = '\0'
2583 // }
|