1 /*
   2  * Copyright (c) 1998, 2019, Oracle and/or its affiliates. All rights reserved.
   3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   4  *
   5  * This code is free software; you can redistribute it and/or modify it
   6  * under the terms of the GNU General Public License version 2 only, as
   7  * published by the Free Software Foundation.
   8  *
   9  * This code is distributed in the hope that it will be useful, but WITHOUT
  10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  12  * version 2 for more details (a copy is included in the LICENSE file that
  13  * accompanied this code).
  14  *
  15  * You should have received a copy of the GNU General Public License version
  16  * 2 along with this work; if not, write to the Free Software Foundation,
  17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  18  *
  19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  20  * or visit www.oracle.com if you need additional information or have any
  21  * questions.
  22  *
  23  */
  24 
  25 #include "precompiled.hpp"
  26 #include "classfile/vmSymbols.hpp"
  27 #include "jfr/jfrEvents.hpp"
  28 #include "jfr/support/jfrThreadId.hpp"
  29 #include "memory/allocation.inline.hpp"
  30 #include "memory/resourceArea.hpp"
  31 #include "oops/markOop.hpp"
  32 #include "oops/oop.inline.hpp"
  33 #include "runtime/atomic.hpp"
  34 #include "runtime/handles.inline.hpp"
  35 #include "runtime/interfaceSupport.inline.hpp"
  36 #include "runtime/mutexLocker.hpp"
  37 #include "runtime/objectMonitor.hpp"
  38 #include "runtime/objectMonitor.inline.hpp"
  39 #include "runtime/orderAccess.hpp"
  40 #include "runtime/osThread.hpp"
  41 #include "runtime/safepointMechanism.inline.hpp"
  42 #include "runtime/sharedRuntime.hpp"
  43 #include "runtime/stubRoutines.hpp"
  44 #include "runtime/thread.inline.hpp"
  45 #include "services/threadService.hpp"
  46 #include "utilities/dtrace.hpp"
  47 #include "utilities/macros.hpp"
  48 #include "utilities/preserveException.hpp"
  49 #if INCLUDE_JFR
  50 #include "jfr/support/jfrFlush.hpp"
  51 #endif
  52 
  53 #ifdef DTRACE_ENABLED
  54 
  55 // Only bother with this argument setup if dtrace is available
  56 // TODO-FIXME: probes should not fire when caller is _blocked.  assert() accordingly.
  57 
  58 
  59 #define DTRACE_MONITOR_PROBE_COMMON(obj, thread)                           \
  60   char* bytes = NULL;                                                      \
  61   int len = 0;                                                             \
  62   jlong jtid = SharedRuntime::get_java_tid(thread);                        \
  63   Symbol* klassname = ((oop)obj)->klass()->name();                         \
  64   if (klassname != NULL) {                                                 \
  65     bytes = (char*)klassname->bytes();                                     \
  66     len = klassname->utf8_length();                                        \
  67   }
  68 
  69 #define DTRACE_MONITOR_WAIT_PROBE(monitor, obj, thread, millis)            \
  70   {                                                                        \
  71     if (DTraceMonitorProbes) {                                             \
  72       DTRACE_MONITOR_PROBE_COMMON(obj, thread);                            \
  73       HOTSPOT_MONITOR_WAIT(jtid,                                           \
  74                            (monitor), bytes, len, (millis));               \
  75     }                                                                      \
  76   }
  77 
  78 #define HOTSPOT_MONITOR_contended__enter HOTSPOT_MONITOR_CONTENDED_ENTER
  79 #define HOTSPOT_MONITOR_contended__entered HOTSPOT_MONITOR_CONTENDED_ENTERED
  80 #define HOTSPOT_MONITOR_contended__exit HOTSPOT_MONITOR_CONTENDED_EXIT
  81 #define HOTSPOT_MONITOR_notify HOTSPOT_MONITOR_NOTIFY
  82 #define HOTSPOT_MONITOR_notifyAll HOTSPOT_MONITOR_NOTIFYALL
  83 
  84 #define DTRACE_MONITOR_PROBE(probe, monitor, obj, thread)                  \
  85   {                                                                        \
  86     if (DTraceMonitorProbes) {                                             \
  87       DTRACE_MONITOR_PROBE_COMMON(obj, thread);                            \
  88       HOTSPOT_MONITOR_##probe(jtid,                                        \
  89                               (uintptr_t)(monitor), bytes, len);           \
  90     }                                                                      \
  91   }
  92 
  93 #else //  ndef DTRACE_ENABLED
  94 
  95 #define DTRACE_MONITOR_WAIT_PROBE(obj, thread, millis, mon)    {;}
  96 #define DTRACE_MONITOR_PROBE(probe, obj, thread, mon)          {;}
  97 
  98 #endif // ndef DTRACE_ENABLED
  99 
 100 // Tunables ...
 101 // The knob* variables are effectively final.  Once set they should
 102 // never be modified hence.  Consider using __read_mostly with GCC.
 103 
 104 int ObjectMonitor::Knob_SpinLimit    = 5000;    // derived by an external tool -
 105 
 106 static int Knob_Bonus               = 100;     // spin success bonus
 107 static int Knob_BonusB              = 100;     // spin success bonus
 108 static int Knob_Penalty             = 200;     // spin failure penalty
 109 static int Knob_Poverty             = 1000;
 110 static int Knob_FixedSpin           = 0;
 111 static int Knob_PreSpin             = 10;      // 20-100 likely better
 112 
 113 DEBUG_ONLY(static volatile bool InitDone = false;)
 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
 135 //   re-park itself.
 136 //
 137 //   Succession is provided for by a policy of competitive handoff.
 138 //   The exiting thread does _not_ grant or pass ownership to the
 139 //   successor thread.  (This is also referred to as "handoff" succession").
 140 //   Instead the exiting thread releases ownership and possibly wakes
 141 //   a successor, so the successor can (re)compete for ownership of the lock.
 142 //   If the EntryList is empty but the cxq is populated the exiting
 143 //   thread will drain the cxq into the EntryList.  It does so by
 144 //   by detaching the cxq (installing null with CAS) and folding
 145 //   the threads from the cxq into the EntryList.  The EntryList is
 146 //   doubly linked, while the cxq is singly linked because of the
 147 //   CAS-based "push" used to enqueue recently arrived threads (RATs).
 148 //
 149 // * Concurrency invariants:
 150 //
 151 //   -- only the monitor owner may access or mutate the EntryList.
 152 //      The mutex property of the monitor itself protects the EntryList
 153 //      from concurrent interference.
 154 //   -- Only the monitor owner may detach the cxq.
 155 //
 156 // * The monitor entry list operations avoid locks, but strictly speaking
 157 //   they're not lock-free.  Enter is lock-free, exit is not.
 158 //   For a description of 'Methods and apparatus providing non-blocking access
 159 //   to a resource,' see U.S. Pat. No. 7844973.
 160 //
 161 // * The cxq can have multiple concurrent "pushers" but only one concurrent
 162 //   detaching thread.  This mechanism is immune from the ABA corruption.
 163 //   More precisely, the CAS-based "push" onto cxq is ABA-oblivious.
 164 //
 165 // * Taken together, the cxq and the EntryList constitute or form a
 166 //   single logical queue of threads stalled trying to acquire the lock.
 167 //   We use two distinct lists to improve the odds of a constant-time
 168 //   dequeue operation after acquisition (in the ::enter() epilogue) and
 169 //   to reduce heat on the list ends.  (c.f. Michael Scott's "2Q" algorithm).
 170 //   A key desideratum is to minimize queue & monitor metadata manipulation
 171 //   that occurs while holding the monitor lock -- that is, we want to
 172 //   minimize monitor lock holds times.  Note that even a small amount of
 173 //   fixed spinning will greatly reduce the # of enqueue-dequeue operations
 174 //   on EntryList|cxq.  That is, spinning relieves contention on the "inner"
 175 //   locks and monitor metadata.
 176 //
 177 //   Cxq points to the set of Recently Arrived Threads attempting entry.
 178 //   Because we push threads onto _cxq with CAS, the RATs must take the form of
 179 //   a singly-linked LIFO.  We drain _cxq into EntryList  at unlock-time when
 180 //   the unlocking thread notices that EntryList is null but _cxq is != null.
 181 //
 182 //   The EntryList is ordered by the prevailing queue discipline and
 183 //   can be organized in any convenient fashion, such as a doubly-linked list or
 184 //   a circular doubly-linked list.  Critically, we want insert and delete operations
 185 //   to operate in constant-time.  If we need a priority queue then something akin
 186 //   to Solaris' sleepq would work nicely.  Viz.,
 187 //   http://agg.eng/ws/on10_nightly/source/usr/src/uts/common/os/sleepq.c.
 188 //   Queue discipline is enforced at ::exit() time, when the unlocking thread
 189 //   drains the cxq into the EntryList, and orders or reorders the threads on the
 190 //   EntryList accordingly.
 191 //
 192 //   Barring "lock barging", this mechanism provides fair cyclic ordering,
 193 //   somewhat similar to an elevator-scan.
 194 //
 195 // * The monitor synchronization subsystem avoids the use of native
 196 //   synchronization primitives except for the narrow platform-specific
 197 //   park-unpark abstraction.  See the comments in os_solaris.cpp regarding
 198 //   the semantics of park-unpark.  Put another way, this monitor implementation
 199 //   depends only on atomic operations and park-unpark.  The monitor subsystem
 200 //   manages all RUNNING->BLOCKED and BLOCKED->READY transitions while the
 201 //   underlying OS manages the READY<->RUN transitions.
 202 //
 203 // * Waiting threads reside on the WaitSet list -- wait() puts
 204 //   the caller onto the WaitSet.
 205 //
 206 // * notify() or notifyAll() simply transfers threads from the WaitSet to
 207 //   either the EntryList or cxq.  Subsequent exit() operations will
 208 //   unpark the notifyee.  Unparking a notifee in notify() is inefficient -
 209 //   it's likely the notifyee would simply impale itself on the lock held
 210 //   by the notifier.
 211 //
 212 // * An interesting alternative is to encode cxq as (List,LockByte) where
 213 //   the LockByte is 0 iff the monitor is owned.  _owner is simply an auxiliary
 214 //   variable, like _recursions, in the scheme.  The threads or Events that form
 215 //   the list would have to be aligned in 256-byte addresses.  A thread would
 216 //   try to acquire the lock or enqueue itself with CAS, but exiting threads
 217 //   could use a 1-0 protocol and simply STB to set the LockByte to 0.
 218 //   Note that is is *not* word-tearing, but it does presume that full-word
 219 //   CAS operations are coherent with intermix with STB operations.  That's true
 220 //   on most common processors.
 221 //
 222 // * See also http://blogs.sun.com/dave
 223 
 224 
 225 void* ObjectMonitor::operator new (size_t size) throw() {
 226   return AllocateHeap(size, mtInternal);
 227 }
 228 void* ObjectMonitor::operator new[] (size_t size) throw() {
 229   return operator new (size);
 230 }
 231 void ObjectMonitor::operator delete(void* p) {
 232   FreeHeap(p);
 233 }
 234 void ObjectMonitor::operator delete[] (void *p) {
 235   operator delete(p);
 236 }
 237 
 238 // -----------------------------------------------------------------------------
 239 // Enter support
 240 
 241 void ObjectMonitor::enter(TRAPS) {
 242   ADIM_guarantee(_ref_count > 0, "must be positive: ref_count=%d", _ref_count);
 243 
 244   // The following code is ordered to check the most common cases first
 245   // and to reduce RTS->RTO cache line upgrades on SPARC and IA32 processors.
 246   Thread * const Self = THREAD;
 247 
 248   void * cur = Atomic::cmpxchg(Self, &_owner, (void*)NULL);
 249   if (cur == NULL) {
 250     assert(_recursions == 0, "invariant");
 251     return;
 252   }
 253 
 254   if (cur == Self) {
 255     // TODO-FIXME: check for integer overflow!  BUGID 6557169.
 256     _recursions++;
 257     return;
 258   }
 259 
 260   if (Self->is_lock_owned ((address)cur)) {
 261     assert(_recursions == 0, "internal state error");
 262     _recursions = 1;
 263     // Commute owner from a thread-specific on-stack BasicLockObject address to
 264     // a full-fledged "Thread *".
 265     _owner = Self;
 266     return;
 267   }
 268 
 269   // We've encountered genuine contention.
 270   assert(Self->_Stalled == 0, "invariant");
 271   Self->_Stalled = intptr_t(this);
 272 
 273   // Try one round of spinning *before* enqueueing Self
 274   // and before going through the awkward and expensive state
 275   // transitions.  The following spin is strictly optional ...
 276   // Note that if we acquire the monitor from an initial spin
 277   // we forgo posting JVMTI events and firing DTRACE probes.
 278   if (TrySpin(Self) > 0) {
 279     assert(_owner == Self, "must be Self: owner=" INTPTR_FORMAT, p2i(_owner));
 280     assert(_recursions == 0, "must be 0: recursions=" INTPTR_FORMAT,
 281            _recursions);
 282     assert(((oop)object())->mark() == markOopDesc::encode(this),
 283            "object mark must match encoded this: mark=" INTPTR_FORMAT
 284            ", encoded this=" INTPTR_FORMAT, p2i(((oop)object())->mark()),
 285            p2i(markOopDesc::encode(this)));
 286     Self->_Stalled = 0;
 287     return;
 288   }
 289 
 290   assert(_owner != Self, "invariant");
 291   assert(_succ != Self, "invariant");
 292   assert(Self->is_Java_thread(), "invariant");
 293   JavaThread * jt = (JavaThread *) Self;
 294   assert(!SafepointSynchronize::is_at_safepoint(), "invariant");
 295   assert(jt->thread_state() != _thread_blocked, "invariant");
 296   assert(AsyncDeflateIdleMonitors || this->object() != NULL, "invariant");
 297   assert(_contentions >= 0, "must not be negative: contentions=%d", _contentions);
 298 
 299   // Prevent deflation. See ObjectSynchronizer::deflate_monitor(),
 300   // ObjectSynchronizer::deflate_monitor_using_JT() and is_busy().
 301   // Ensure the object <-> monitor relationship remains stable while
 302   // there's contention.
 303   Atomic::add(1, &_contentions);
 304 
 305   JFR_ONLY(JfrConditionalFlushWithStacktrace<EventJavaMonitorEnter> flush(jt);)
 306   EventJavaMonitorEnter event;
 307   if (event.should_commit()) {
 308     event.set_monitorClass(((oop)this->object())->klass());
 309     event.set_address((uintptr_t)(this->object_addr()));
 310   }
 311 
 312   { // Change java thread status to indicate blocked on monitor enter.
 313     JavaThreadBlockedOnMonitorEnterState jtbmes(jt, this);
 314 
 315     Self->set_current_pending_monitor(this);
 316 
 317     DTRACE_MONITOR_PROBE(contended__enter, this, object(), jt);
 318     if (JvmtiExport::should_post_monitor_contended_enter()) {
 319       JvmtiExport::post_monitor_contended_enter(jt, this);
 320 
 321       // The current thread does not yet own the monitor and does not
 322       // yet appear on any queues that would get it made the successor.
 323       // This means that the JVMTI_EVENT_MONITOR_CONTENDED_ENTER event
 324       // handler cannot accidentally consume an unpark() meant for the
 325       // ParkEvent associated with this ObjectMonitor.
 326     }
 327 
 328     OSThreadContendState osts(Self->osthread());
 329     ThreadBlockInVM tbivm(jt);
 330 
 331     // TODO-FIXME: change the following for(;;) loop to straight-line code.
 332     for (;;) {
 333       jt->set_suspend_equivalent();
 334       // cleared by handle_special_suspend_equivalent_condition()
 335       // or java_suspend_self()
 336 
 337       EnterI(THREAD);
 338 
 339       if (!ExitSuspendEquivalent(jt)) break;
 340 
 341       // We have acquired the contended monitor, but while we were
 342       // waiting another thread suspended us. We don't want to enter
 343       // the monitor while suspended because that would surprise the
 344       // thread that suspended us.
 345       //
 346       _recursions = 0;
 347       _succ = NULL;
 348       exit(false, Self);
 349 
 350       jt->java_suspend_self();
 351     }
 352     Self->set_current_pending_monitor(NULL);
 353 
 354     // We cleared the pending monitor info since we've just gotten past
 355     // the enter-check-for-suspend dance and we now own the monitor free
 356     // and clear, i.e., it is no longer pending. The ThreadBlockInVM
 357     // destructor can go to a safepoint at the end of this block. If we
 358     // do a thread dump during that safepoint, then this thread will show
 359     // as having "-locked" the monitor, but the OS and java.lang.Thread
 360     // states will still report that the thread is blocked trying to
 361     // acquire it.
 362   }
 363 
 364   Atomic::dec(&_contentions);
 365   assert(_contentions >= 0, "must not be negative: contentions=%d", _contentions);
 366   Self->_Stalled = 0;
 367 
 368   // Must either set _recursions = 0 or ASSERT _recursions == 0.
 369   assert(_recursions == 0, "invariant");
 370   assert(_owner == Self, "invariant");
 371   assert(_succ != Self, "invariant");
 372   assert(((oop)(object()))->mark() == markOopDesc::encode(this), "invariant");
 373 
 374   // The thread -- now the owner -- is back in vm mode.
 375   // Report the glorious news via TI,DTrace and jvmstat.
 376   // The probe effect is non-trivial.  All the reportage occurs
 377   // while we hold the monitor, increasing the length of the critical
 378   // section.  Amdahl's parallel speedup law comes vividly into play.
 379   //
 380   // Another option might be to aggregate the events (thread local or
 381   // per-monitor aggregation) and defer reporting until a more opportune
 382   // time -- such as next time some thread encounters contention but has
 383   // yet to acquire the lock.  While spinning that thread could
 384   // spinning we could increment JVMStat counters, etc.
 385 
 386   DTRACE_MONITOR_PROBE(contended__entered, this, object(), jt);
 387   if (JvmtiExport::should_post_monitor_contended_entered()) {
 388     JvmtiExport::post_monitor_contended_entered(jt, this);
 389 
 390     // The current thread already owns the monitor and is not going to
 391     // call park() for the remainder of the monitor enter protocol. So
 392     // it doesn't matter if the JVMTI_EVENT_MONITOR_CONTENDED_ENTERED
 393     // event handler consumed an unpark() issued by the thread that
 394     // just exited the monitor.
 395   }
 396   if (event.should_commit()) {
 397     event.set_previousOwner((uintptr_t)_previous_owner_tid);
 398     event.commit();
 399   }
 400   OM_PERFDATA_OP(ContendedLockAttempts, inc());
 401 }
 402 
 403 // Caveat: TryLock() is not necessarily serializing if it returns failure.
 404 // Callers must compensate as needed.
 405 
 406 int ObjectMonitor::TryLock(Thread * Self) {
 407   void * own = _owner;
 408   if (own != NULL) return 0;
 409   if (Atomic::replace_if_null(Self, &_owner)) {
 410     assert(_recursions == 0, "invariant");
 411     return 1;
 412   }
 413   // The lock had been free momentarily, but we lost the race to the lock.
 414   // Interference -- the CAS failed.
 415   // We can either return -1 or retry.
 416   // Retry doesn't make as much sense because the lock was just acquired.
 417   return -1;
 418 }
 419 
 420 // Install the displaced mark word (dmw) of a deflating ObjectMonitor
 421 // into the header of the object associated with the monitor. This
 422 // idempotent method is called by a thread that is deflating a
 423 // monitor and by other threads that have detected a race with the
 424 // deflation process.
 425 void ObjectMonitor::install_displaced_markword_in_object(const oop obj) {
 426   // This function must only be called when (owner == DEFLATER_MARKER
 427   // && ref_count <= 0), but we can't guarantee that here because
 428   // those values could change when the ObjectMonitor gets moved from
 429   // the global free list to a per-thread free list.
 430 
 431   guarantee(obj != NULL, "must be non-NULL");
 432   if (object() != obj) {
 433     // ObjectMonitor's object ref no longer refers to the target object
 434     // so the object's header has already been restored.
 435     return;
 436   }
 437 
 438   markOop dmw = header();
 439   if (dmw == NULL) {
 440     // ObjectMonitor's header/dmw has been cleared by the deflating
 441     // thread so the object's header has already been restored.
 442     return;
 443   }
 444 
 445   // A non-NULL dmw has to be either neutral (not locked and not marked)
 446   // or is already participating in this restoration protocol.
 447   assert(dmw->is_neutral() || (dmw->is_marked() && dmw->hash() == 0),
 448          "failed precondition: dmw=" INTPTR_FORMAT, p2i(dmw));
 449 
 450   markOop marked_dmw = NULL;
 451   if (!dmw->is_marked() && dmw->hash() == 0) {
 452     // This dmw has not yet started the restoration protocol so we
 453     // mark a copy of the dmw to begin the protocol.
 454     // Note: A dmw with a hashcode does not take this code path.
 455     marked_dmw = dmw->set_marked();
 456 
 457     // All of the callers to this function can be racing with each
 458     // other trying to update the _header field.
 459     dmw = (markOop) Atomic::cmpxchg(marked_dmw, &_header, dmw);
 460     if (dmw == NULL) {
 461       // ObjectMonitor's header/dmw has been cleared by the deflating
 462       // thread so the object's header has already been restored.
 463       return;
 464     }
 465     // The _header field is now marked. The winner's 'dmw' variable
 466     // contains the original, unmarked header/dmw value and any
 467     // losers have a marked header/dmw value that will be cleaned
 468     // up below.
 469   }
 470 
 471   if (dmw->is_marked()) {
 472     // Clear the mark from the header/dmw copy in preparation for
 473     // possible restoration from this thread.
 474     assert(dmw->hash() == 0, "hashcode must be 0: dmw=" INTPTR_FORMAT,
 475            p2i(dmw));
 476     dmw = dmw->set_unmarked();
 477   }
 478   assert(dmw->is_neutral(), "must be neutral: dmw=" INTPTR_FORMAT, p2i(dmw));
 479 
 480   // Install displaced mark word if the object's header still points
 481   // to this ObjectMonitor. All racing callers to this function will
 482   // reach this point, but only one can win.
 483   obj->cas_set_mark(dmw, markOopDesc::encode(this));
 484 
 485   // Note: It does not matter which thread restored the header/dmw
 486   // into the object's header. The thread deflating the monitor just
 487   // wanted the object's header restored and it is. The threads that
 488   // detected a race with the deflation process also wanted the
 489   // object's header restored before they retry their operation and
 490   // because it is restored they will only retry once.
 491 
 492   if (marked_dmw != NULL) {
 493     // Clear _header to NULL if it is still marked_dmw so a racing
 494     // install_displaced_markword_in_object() can bail out sooner.
 495     Atomic::cmpxchg((markOop)NULL, &_header, marked_dmw);
 496   }
 497 }
 498 
 499 // Convert the fields used by is_busy() to a string that can be
 500 // used for diagnostic output.
 501 const char* ObjectMonitor::is_busy_to_string(stringStream* ss) {
 502   ss->print("is_busy: contentions=%d, waiters=%d, owner=" INTPTR_FORMAT
 503             ", cxq=" INTPTR_FORMAT ", EntryList=" INTPTR_FORMAT, _contentions,
 504             _waiters, p2i(_owner), p2i(_cxq), p2i(_EntryList));
 505   return ss->base();
 506 }
 507 
 508 #define MAX_RECHECK_INTERVAL 1000
 509 
 510 void ObjectMonitor::EnterI(TRAPS) {
 511   ADIM_guarantee(_ref_count > 0, "must be positive: ref_count=%d", _ref_count);
 512 
 513   Thread * const Self = THREAD;
 514   assert(Self->is_Java_thread(), "invariant");
 515   assert(((JavaThread *) Self)->thread_state() == _thread_blocked, "invariant");
 516 
 517   // Try the lock - TATAS
 518   if (TryLock (Self) > 0) {
 519     assert(_succ != Self, "invariant");
 520     assert(_owner == Self, "invariant");
 521     assert(_Responsible != Self, "invariant");
 522     return;
 523   }
 524 
 525   if (_owner == DEFLATER_MARKER) {
 526     // The deflation protocol finished the first part (setting owner), but
 527     // it failed the second part (making ref_count negative) and bailed.
 528     if (Atomic::cmpxchg(Self, &_owner, DEFLATER_MARKER) == DEFLATER_MARKER) {
 529       // Acquired the monitor.
 530       assert(_succ != Self, "invariant");
 531       assert(_Responsible != Self, "invariant");
 532       return;
 533     }
 534   }
 535 
 536   assert(InitDone, "Unexpectedly not initialized");
 537 
 538   // We try one round of spinning *before* enqueueing Self.
 539   //
 540   // If the _owner is ready but OFFPROC we could use a YieldTo()
 541   // operation to donate the remainder of this thread's quantum
 542   // to the owner.  This has subtle but beneficial affinity
 543   // effects.
 544 
 545   if (TrySpin(Self) > 0) {
 546     assert(_owner == Self, "invariant");
 547     assert(_succ != Self, "invariant");
 548     assert(_Responsible != Self, "invariant");
 549     return;
 550   }
 551 
 552   // The Spin failed -- Enqueue and park the thread ...
 553   assert(_succ != Self, "invariant");
 554   assert(_owner != Self, "invariant");
 555   assert(_Responsible != Self, "invariant");
 556 
 557   // Enqueue "Self" on ObjectMonitor's _cxq.
 558   //
 559   // Node acts as a proxy for Self.
 560   // As an aside, if were to ever rewrite the synchronization code mostly
 561   // in Java, WaitNodes, ObjectMonitors, and Events would become 1st-class
 562   // Java objects.  This would avoid awkward lifecycle and liveness issues,
 563   // as well as eliminate a subset of ABA issues.
 564   // TODO: eliminate ObjectWaiter and enqueue either Threads or Events.
 565 
 566   ObjectWaiter node(Self);
 567   Self->_ParkEvent->reset();
 568   node._prev   = (ObjectWaiter *) 0xBAD;
 569   node.TState  = ObjectWaiter::TS_CXQ;
 570 
 571   // Push "Self" onto the front of the _cxq.
 572   // Once on cxq/EntryList, Self stays on-queue until it acquires the lock.
 573   // Note that spinning tends to reduce the rate at which threads
 574   // enqueue and dequeue on EntryList|cxq.
 575   ObjectWaiter * nxt;
 576   for (;;) {
 577     node._next = nxt = _cxq;
 578     if (Atomic::cmpxchg(&node, &_cxq, nxt) == nxt) break;
 579 
 580     // Interference - the CAS failed because _cxq changed.  Just retry.
 581     // As an optional optimization we retry the lock.
 582     if (TryLock (Self) > 0) {
 583       assert(_succ != Self, "invariant");
 584       assert(_owner == Self, "invariant");
 585       assert(_Responsible != Self, "invariant");
 586       return;
 587     }
 588   }
 589 
 590   // Check for cxq|EntryList edge transition to non-null.  This indicates
 591   // the onset of contention.  While contention persists exiting threads
 592   // will use a ST:MEMBAR:LD 1-1 exit protocol.  When contention abates exit
 593   // operations revert to the faster 1-0 mode.  This enter operation may interleave
 594   // (race) a concurrent 1-0 exit operation, resulting in stranding, so we
 595   // arrange for one of the contending thread to use a timed park() operations
 596   // to detect and recover from the race.  (Stranding is form of progress failure
 597   // where the monitor is unlocked but all the contending threads remain parked).
 598   // That is, at least one of the contended threads will periodically poll _owner.
 599   // One of the contending threads will become the designated "Responsible" thread.
 600   // The Responsible thread uses a timed park instead of a normal indefinite park
 601   // operation -- it periodically wakes and checks for and recovers from potential
 602   // strandings admitted by 1-0 exit operations.   We need at most one Responsible
 603   // thread per-monitor at any given moment.  Only threads on cxq|EntryList may
 604   // be responsible for a monitor.
 605   //
 606   // Currently, one of the contended threads takes on the added role of "Responsible".
 607   // A viable alternative would be to use a dedicated "stranding checker" thread
 608   // that periodically iterated over all the threads (or active monitors) and unparked
 609   // successors where there was risk of stranding.  This would help eliminate the
 610   // timer scalability issues we see on some platforms as we'd only have one thread
 611   // -- the checker -- parked on a timer.
 612 
 613   if (nxt == NULL && _EntryList == NULL) {
 614     // Try to assume the role of responsible thread for the monitor.
 615     // CONSIDER:  ST vs CAS vs { if (Responsible==null) Responsible=Self }
 616     Atomic::replace_if_null(Self, &_Responsible);
 617   }
 618 
 619   // The lock might have been released while this thread was occupied queueing
 620   // itself onto _cxq.  To close the race and avoid "stranding" and
 621   // progress-liveness failure we must resample-retry _owner before parking.
 622   // Note the Dekker/Lamport duality: ST cxq; MEMBAR; LD Owner.
 623   // In this case the ST-MEMBAR is accomplished with CAS().
 624   //
 625   // TODO: Defer all thread state transitions until park-time.
 626   // Since state transitions are heavy and inefficient we'd like
 627   // to defer the state transitions until absolutely necessary,
 628   // and in doing so avoid some transitions ...
 629 
 630   int nWakeups = 0;
 631   int recheckInterval = 1;
 632 
 633   for (;;) {
 634 
 635     if (TryLock(Self) > 0) break;
 636     assert(_owner != Self, "invariant");
 637 
 638     // park self
 639     if (_Responsible == Self) {
 640       Self->_ParkEvent->park((jlong) recheckInterval);
 641       // Increase the recheckInterval, but clamp the value.
 642       recheckInterval *= 8;
 643       if (recheckInterval > MAX_RECHECK_INTERVAL) {
 644         recheckInterval = MAX_RECHECK_INTERVAL;
 645       }
 646     } else {
 647       Self->_ParkEvent->park();
 648     }
 649 
 650     if (TryLock(Self) > 0) break;
 651 
 652     if (_owner == DEFLATER_MARKER) {
 653       // The deflation protocol finished the first part (setting owner), but
 654       // it failed the second part (making ref_count negative) and bailed.
 655       if (Atomic::cmpxchg(Self, &_owner, DEFLATER_MARKER) == DEFLATER_MARKER) {
 656         // Acquired the monitor.
 657         break;
 658       }
 659     }
 660 
 661     // The lock is still contested.
 662     // Keep a tally of the # of futile wakeups.
 663     // Note that the counter is not protected by a lock or updated by atomics.
 664     // That is by design - we trade "lossy" counters which are exposed to
 665     // races during updates for a lower probe effect.
 666 
 667     // This PerfData object can be used in parallel with a safepoint.
 668     // See the work around in PerfDataManager::destroy().
 669     OM_PERFDATA_OP(FutileWakeups, inc());
 670     ++nWakeups;
 671 
 672     // Assuming this is not a spurious wakeup we'll normally find _succ == Self.
 673     // We can defer clearing _succ until after the spin completes
 674     // TrySpin() must tolerate being called with _succ == Self.
 675     // Try yet another round of adaptive spinning.
 676     if (TrySpin(Self) > 0) break;
 677 
 678     // We can find that we were unpark()ed and redesignated _succ while
 679     // we were spinning.  That's harmless.  If we iterate and call park(),
 680     // park() will consume the event and return immediately and we'll
 681     // just spin again.  This pattern can repeat, leaving _succ to simply
 682     // spin on a CPU.
 683 
 684     if (_succ == Self) _succ = NULL;
 685 
 686     // Invariant: after clearing _succ a thread *must* retry _owner before parking.
 687     OrderAccess::fence();
 688   }
 689 
 690   // Egress :
 691   // Self has acquired the lock -- Unlink Self from the cxq or EntryList.
 692   // Normally we'll find Self on the EntryList .
 693   // From the perspective of the lock owner (this thread), the
 694   // EntryList is stable and cxq is prepend-only.
 695   // The head of cxq is volatile but the interior is stable.
 696   // In addition, Self.TState is stable.
 697 
 698   assert(_owner == Self, "invariant");
 699   assert(object() != NULL, "invariant");
 700   // I'd like to write:
 701   //   guarantee (((oop)(object()))->mark() == markOopDesc::encode(this), "invariant") ;
 702   // but as we're at a safepoint that's not safe.
 703 
 704   UnlinkAfterAcquire(Self, &node);
 705   if (_succ == Self) _succ = NULL;
 706 
 707   assert(_succ != Self, "invariant");
 708   if (_Responsible == Self) {
 709     _Responsible = NULL;
 710     OrderAccess::fence(); // Dekker pivot-point
 711 
 712     // We may leave threads on cxq|EntryList without a designated
 713     // "Responsible" thread.  This is benign.  When this thread subsequently
 714     // exits the monitor it can "see" such preexisting "old" threads --
 715     // threads that arrived on the cxq|EntryList before the fence, above --
 716     // by LDing cxq|EntryList.  Newly arrived threads -- that is, threads
 717     // that arrive on cxq after the ST:MEMBAR, above -- will set Responsible
 718     // non-null and elect a new "Responsible" timer thread.
 719     //
 720     // This thread executes:
 721     //    ST Responsible=null; MEMBAR    (in enter epilogue - here)
 722     //    LD cxq|EntryList               (in subsequent exit)
 723     //
 724     // Entering threads in the slow/contended path execute:
 725     //    ST cxq=nonnull; MEMBAR; LD Responsible (in enter prolog)
 726     //    The (ST cxq; MEMBAR) is accomplished with CAS().
 727     //
 728     // The MEMBAR, above, prevents the LD of cxq|EntryList in the subsequent
 729     // exit operation from floating above the ST Responsible=null.
 730   }
 731 
 732   // We've acquired ownership with CAS().
 733   // CAS is serializing -- it has MEMBAR/FENCE-equivalent semantics.
 734   // But since the CAS() this thread may have also stored into _succ,
 735   // EntryList, cxq or Responsible.  These meta-data updates must be
 736   // visible __before this thread subsequently drops the lock.
 737   // Consider what could occur if we didn't enforce this constraint --
 738   // STs to monitor meta-data and user-data could reorder with (become
 739   // visible after) the ST in exit that drops ownership of the lock.
 740   // Some other thread could then acquire the lock, but observe inconsistent
 741   // or old monitor meta-data and heap data.  That violates the JMM.
 742   // To that end, the 1-0 exit() operation must have at least STST|LDST
 743   // "release" barrier semantics.  Specifically, there must be at least a
 744   // STST|LDST barrier in exit() before the ST of null into _owner that drops
 745   // the lock.   The barrier ensures that changes to monitor meta-data and data
 746   // protected by the lock will be visible before we release the lock, and
 747   // therefore before some other thread (CPU) has a chance to acquire the lock.
 748   // See also: http://gee.cs.oswego.edu/dl/jmm/cookbook.html.
 749   //
 750   // Critically, any prior STs to _succ or EntryList must be visible before
 751   // the ST of null into _owner in the *subsequent* (following) corresponding
 752   // monitorexit.  Recall too, that in 1-0 mode monitorexit does not necessarily
 753   // execute a serializing instruction.
 754 
 755   return;
 756 }
 757 
 758 // ReenterI() is a specialized inline form of the latter half of the
 759 // contended slow-path from EnterI().  We use ReenterI() only for
 760 // monitor reentry in wait().
 761 //
 762 // In the future we should reconcile EnterI() and ReenterI().
 763 
 764 void ObjectMonitor::ReenterI(Thread * Self, ObjectWaiter * SelfNode) {
 765   ADIM_guarantee(_ref_count > 0, "must be positive: ref_count=%d", _ref_count);
 766 
 767   assert(Self != NULL, "invariant");
 768   assert(SelfNode != NULL, "invariant");
 769   assert(SelfNode->_thread == Self, "invariant");
 770   assert(_waiters > 0, "invariant");
 771   assert(((oop)(object()))->mark() == markOopDesc::encode(this), "invariant");
 772   assert(((JavaThread *)Self)->thread_state() != _thread_blocked, "invariant");
 773   JavaThread * jt = (JavaThread *) Self;
 774 
 775   int nWakeups = 0;
 776   for (;;) {
 777     ObjectWaiter::TStates v = SelfNode->TState;
 778     guarantee(v == ObjectWaiter::TS_ENTER || v == ObjectWaiter::TS_CXQ, "invariant");
 779     assert(_owner != Self, "invariant");
 780 
 781     if (TryLock(Self) > 0) break;
 782     if (TrySpin(Self) > 0) break;
 783 
 784     if (_owner == DEFLATER_MARKER) {
 785       // The deflation protocol finished the first part (setting owner), but
 786       // it failed the second part (making ref_count negative) and bailed.
 787       if (Atomic::cmpxchg(Self, &_owner, DEFLATER_MARKER) == DEFLATER_MARKER) {
 788         // Acquired the monitor.
 789         break;
 790       }
 791     }
 792 
 793     // State transition wrappers around park() ...
 794     // ReenterI() wisely defers state transitions until
 795     // it's clear we must park the thread.
 796     {
 797       OSThreadContendState osts(Self->osthread());
 798       ThreadBlockInVM tbivm(jt);
 799 
 800       // cleared by handle_special_suspend_equivalent_condition()
 801       // or java_suspend_self()
 802       jt->set_suspend_equivalent();
 803       Self->_ParkEvent->park();
 804 
 805       // were we externally suspended while we were waiting?
 806       for (;;) {
 807         if (!ExitSuspendEquivalent(jt)) break;
 808         if (_succ == Self) { _succ = NULL; OrderAccess::fence(); }
 809         jt->java_suspend_self();
 810         jt->set_suspend_equivalent();
 811       }
 812     }
 813 
 814     // Try again, but just so we distinguish between futile wakeups and
 815     // successful wakeups.  The following test isn't algorithmically
 816     // necessary, but it helps us maintain sensible statistics.
 817     if (TryLock(Self) > 0) break;
 818 
 819     // The lock is still contested.
 820     // Keep a tally of the # of futile wakeups.
 821     // Note that the counter is not protected by a lock or updated by atomics.
 822     // That is by design - we trade "lossy" counters which are exposed to
 823     // races during updates for a lower probe effect.
 824     ++nWakeups;
 825 
 826     // Assuming this is not a spurious wakeup we'll normally
 827     // find that _succ == Self.
 828     if (_succ == Self) _succ = NULL;
 829 
 830     // Invariant: after clearing _succ a contending thread
 831     // *must* retry  _owner before parking.
 832     OrderAccess::fence();
 833 
 834     // This PerfData object can be used in parallel with a safepoint.
 835     // See the work around in PerfDataManager::destroy().
 836     OM_PERFDATA_OP(FutileWakeups, inc());
 837   }
 838 
 839   // Self has acquired the lock -- Unlink Self from the cxq or EntryList .
 840   // Normally we'll find Self on the EntryList.
 841   // Unlinking from the EntryList is constant-time and atomic-free.
 842   // From the perspective of the lock owner (this thread), the
 843   // EntryList is stable and cxq is prepend-only.
 844   // The head of cxq is volatile but the interior is stable.
 845   // In addition, Self.TState is stable.
 846 
 847   assert(_owner == Self, "invariant");
 848   assert(((oop)(object()))->mark() == markOopDesc::encode(this), "invariant");
 849   UnlinkAfterAcquire(Self, SelfNode);
 850   if (_succ == Self) _succ = NULL;
 851   assert(_succ != Self, "invariant");
 852   SelfNode->TState = ObjectWaiter::TS_RUN;
 853   OrderAccess::fence();      // see comments at the end of EnterI()
 854 }
 855 
 856 // By convention we unlink a contending thread from EntryList|cxq immediately
 857 // after the thread acquires the lock in ::enter().  Equally, we could defer
 858 // unlinking the thread until ::exit()-time.
 859 
 860 void ObjectMonitor::UnlinkAfterAcquire(Thread *Self, ObjectWaiter *SelfNode) {
 861   assert(_owner == Self, "invariant");
 862   assert(SelfNode->_thread == Self, "invariant");
 863 
 864   if (SelfNode->TState == ObjectWaiter::TS_ENTER) {
 865     // Normal case: remove Self from the DLL EntryList .
 866     // This is a constant-time operation.
 867     ObjectWaiter * nxt = SelfNode->_next;
 868     ObjectWaiter * prv = SelfNode->_prev;
 869     if (nxt != NULL) nxt->_prev = prv;
 870     if (prv != NULL) prv->_next = nxt;
 871     if (SelfNode == _EntryList) _EntryList = nxt;
 872     assert(nxt == NULL || nxt->TState == ObjectWaiter::TS_ENTER, "invariant");
 873     assert(prv == NULL || prv->TState == ObjectWaiter::TS_ENTER, "invariant");
 874   } else {
 875     assert(SelfNode->TState == ObjectWaiter::TS_CXQ, "invariant");
 876     // Inopportune interleaving -- Self is still on the cxq.
 877     // This usually means the enqueue of self raced an exiting thread.
 878     // Normally we'll find Self near the front of the cxq, so
 879     // dequeueing is typically fast.  If needbe we can accelerate
 880     // this with some MCS/CHL-like bidirectional list hints and advisory
 881     // back-links so dequeueing from the interior will normally operate
 882     // in constant-time.
 883     // Dequeue Self from either the head (with CAS) or from the interior
 884     // with a linear-time scan and normal non-atomic memory operations.
 885     // CONSIDER: if Self is on the cxq then simply drain cxq into EntryList
 886     // and then unlink Self from EntryList.  We have to drain eventually,
 887     // so it might as well be now.
 888 
 889     ObjectWaiter * v = _cxq;
 890     assert(v != NULL, "invariant");
 891     if (v != SelfNode || Atomic::cmpxchg(SelfNode->_next, &_cxq, v) != v) {
 892       // The CAS above can fail from interference IFF a "RAT" arrived.
 893       // In that case Self must be in the interior and can no longer be
 894       // at the head of cxq.
 895       if (v == SelfNode) {
 896         assert(_cxq != v, "invariant");
 897         v = _cxq;          // CAS above failed - start scan at head of list
 898       }
 899       ObjectWaiter * p;
 900       ObjectWaiter * q = NULL;
 901       for (p = v; p != NULL && p != SelfNode; p = p->_next) {
 902         q = p;
 903         assert(p->TState == ObjectWaiter::TS_CXQ, "invariant");
 904       }
 905       assert(v != SelfNode, "invariant");
 906       assert(p == SelfNode, "Node not found on cxq");
 907       assert(p != _cxq, "invariant");
 908       assert(q != NULL, "invariant");
 909       assert(q->_next == p, "invariant");
 910       q->_next = p->_next;
 911     }
 912   }
 913 
 914 #ifdef ASSERT
 915   // Diagnostic hygiene ...
 916   SelfNode->_prev  = (ObjectWaiter *) 0xBAD;
 917   SelfNode->_next  = (ObjectWaiter *) 0xBAD;
 918   SelfNode->TState = ObjectWaiter::TS_RUN;
 919 #endif
 920 }
 921 
 922 // -----------------------------------------------------------------------------
 923 // Exit support
 924 //
 925 // exit()
 926 // ~~~~~~
 927 // Note that the collector can't reclaim the objectMonitor or deflate
 928 // the object out from underneath the thread calling ::exit() as the
 929 // thread calling ::exit() never transitions to a stable state.
 930 // This inhibits GC, which in turn inhibits asynchronous (and
 931 // inopportune) reclamation of "this".
 932 //
 933 // We'd like to assert that: (THREAD->thread_state() != _thread_blocked) ;
 934 // There's one exception to the claim above, however.  EnterI() can call
 935 // exit() to drop a lock if the acquirer has been externally suspended.
 936 // In that case exit() is called with _thread_state as _thread_blocked,
 937 // but the monitor's _contentions field is > 0, which inhibits reclamation.
 938 //
 939 // 1-0 exit
 940 // ~~~~~~~~
 941 // ::exit() uses a canonical 1-1 idiom with a MEMBAR although some of
 942 // the fast-path operators have been optimized so the common ::exit()
 943 // operation is 1-0, e.g., see macroAssembler_x86.cpp: fast_unlock().
 944 // The code emitted by fast_unlock() elides the usual MEMBAR.  This
 945 // greatly improves latency -- MEMBAR and CAS having considerable local
 946 // latency on modern processors -- but at the cost of "stranding".  Absent the
 947 // MEMBAR, a thread in fast_unlock() can race a thread in the slow
 948 // ::enter() path, resulting in the entering thread being stranding
 949 // and a progress-liveness failure.   Stranding is extremely rare.
 950 // We use timers (timed park operations) & periodic polling to detect
 951 // and recover from stranding.  Potentially stranded threads periodically
 952 // wake up and poll the lock.  See the usage of the _Responsible variable.
 953 //
 954 // The CAS() in enter provides for safety and exclusion, while the CAS or
 955 // MEMBAR in exit provides for progress and avoids stranding.  1-0 locking
 956 // eliminates the CAS/MEMBAR from the exit path, but it admits stranding.
 957 // We detect and recover from stranding with timers.
 958 //
 959 // If a thread transiently strands it'll park until (a) another
 960 // thread acquires the lock and then drops the lock, at which time the
 961 // exiting thread will notice and unpark the stranded thread, or, (b)
 962 // the timer expires.  If the lock is high traffic then the stranding latency
 963 // will be low due to (a).  If the lock is low traffic then the odds of
 964 // stranding are lower, although the worst-case stranding latency
 965 // is longer.  Critically, we don't want to put excessive load in the
 966 // platform's timer subsystem.  We want to minimize both the timer injection
 967 // rate (timers created/sec) as well as the number of timers active at
 968 // any one time.  (more precisely, we want to minimize timer-seconds, which is
 969 // the integral of the # of active timers at any instant over time).
 970 // Both impinge on OS scalability.  Given that, at most one thread parked on
 971 // a monitor will use a timer.
 972 //
 973 // There is also the risk of a futile wake-up. If we drop the lock
 974 // another thread can reacquire the lock immediately, and we can
 975 // then wake a thread unnecessarily. This is benign, and we've
 976 // structured the code so the windows are short and the frequency
 977 // of such futile wakups is low.
 978 
 979 void ObjectMonitor::exit(bool not_suspended, TRAPS) {
 980   Thread * const Self = THREAD;
 981   if (THREAD != _owner) {
 982     if (THREAD->is_lock_owned((address) _owner)) {
 983       // Transmute _owner from a BasicLock pointer to a Thread address.
 984       // We don't need to hold _mutex for this transition.
 985       // Non-null to Non-null is safe as long as all readers can
 986       // tolerate either flavor.
 987       assert(_recursions == 0, "invariant");
 988       _owner = THREAD;
 989       _recursions = 0;
 990     } else {
 991       // Apparent unbalanced locking ...
 992       // Naively we'd like to throw IllegalMonitorStateException.
 993       // As a practical matter we can neither allocate nor throw an
 994       // exception as ::exit() can be called from leaf routines.
 995       // see x86_32.ad Fast_Unlock() and the I1 and I2 properties.
 996       // Upon deeper reflection, however, in a properly run JVM the only
 997       // way we should encounter this situation is in the presence of
 998       // unbalanced JNI locking. TODO: CheckJNICalls.
 999       // See also: CR4414101
1000       assert(false, "Non-balanced monitor enter/exit! Likely JNI locking: "
1001              "owner=" INTPTR_FORMAT, p2i(_owner));
1002       return;
1003     }
1004   }
1005 
1006   if (_recursions != 0) {
1007     _recursions--;        // this is simple recursive enter
1008     return;
1009   }
1010 
1011   // Invariant: after setting Responsible=null an thread must execute
1012   // a MEMBAR or other serializing instruction before fetching EntryList|cxq.
1013   _Responsible = NULL;
1014 
1015 #if INCLUDE_JFR
1016   // get the owner's thread id for the MonitorEnter event
1017   // if it is enabled and the thread isn't suspended
1018   if (not_suspended && EventJavaMonitorEnter::is_enabled()) {
1019     _previous_owner_tid = JFR_THREAD_ID(Self);
1020   }
1021 #endif
1022 
1023   for (;;) {
1024     assert(THREAD == _owner, "invariant");
1025 
1026     // release semantics: prior loads and stores from within the critical section
1027     // must not float (reorder) past the following store that drops the lock.
1028     // On SPARC that requires MEMBAR #loadstore|#storestore.
1029     // But of course in TSO #loadstore|#storestore is not required.
1030     OrderAccess::release_store(&_owner, (void*)NULL);   // drop the lock
1031     OrderAccess::storeload();                        // See if we need to wake a successor
1032     if ((intptr_t(_EntryList)|intptr_t(_cxq)) == 0 || _succ != NULL) {
1033       return;
1034     }
1035     // Other threads are blocked trying to acquire the lock.
1036 
1037     // Normally the exiting thread is responsible for ensuring succession,
1038     // but if other successors are ready or other entering threads are spinning
1039     // then this thread can simply store NULL into _owner and exit without
1040     // waking a successor.  The existence of spinners or ready successors
1041     // guarantees proper succession (liveness).  Responsibility passes to the
1042     // ready or running successors.  The exiting thread delegates the duty.
1043     // More precisely, if a successor already exists this thread is absolved
1044     // of the responsibility of waking (unparking) one.
1045     //
1046     // The _succ variable is critical to reducing futile wakeup frequency.
1047     // _succ identifies the "heir presumptive" thread that has been made
1048     // ready (unparked) but that has not yet run.  We need only one such
1049     // successor thread to guarantee progress.
1050     // See http://www.usenix.org/events/jvm01/full_papers/dice/dice.pdf
1051     // section 3.3 "Futile Wakeup Throttling" for details.
1052     //
1053     // Note that spinners in Enter() also set _succ non-null.
1054     // In the current implementation spinners opportunistically set
1055     // _succ so that exiting threads might avoid waking a successor.
1056     // Another less appealing alternative would be for the exiting thread
1057     // to drop the lock and then spin briefly to see if a spinner managed
1058     // to acquire the lock.  If so, the exiting thread could exit
1059     // immediately without waking a successor, otherwise the exiting
1060     // thread would need to dequeue and wake a successor.
1061     // (Note that we'd need to make the post-drop spin short, but no
1062     // shorter than the worst-case round-trip cache-line migration time.
1063     // The dropped lock needs to become visible to the spinner, and then
1064     // the acquisition of the lock by the spinner must become visible to
1065     // the exiting thread).
1066 
1067     // It appears that an heir-presumptive (successor) must be made ready.
1068     // Only the current lock owner can manipulate the EntryList or
1069     // drain _cxq, so we need to reacquire the lock.  If we fail
1070     // to reacquire the lock the responsibility for ensuring succession
1071     // falls to the new owner.
1072     //
1073     if (!Atomic::replace_if_null(THREAD, &_owner)) {
1074       return;
1075     }
1076 
1077     guarantee(_owner == THREAD, "invariant");
1078 
1079     ObjectWaiter * w = NULL;
1080 
1081     w = _EntryList;
1082     if (w != NULL) {
1083       // I'd like to write: guarantee (w->_thread != Self).
1084       // But in practice an exiting thread may find itself on the EntryList.
1085       // Let's say thread T1 calls O.wait().  Wait() enqueues T1 on O's waitset and
1086       // then calls exit().  Exit release the lock by setting O._owner to NULL.
1087       // Let's say T1 then stalls.  T2 acquires O and calls O.notify().  The
1088       // notify() operation moves T1 from O's waitset to O's EntryList. T2 then
1089       // release the lock "O".  T2 resumes immediately after the ST of null into
1090       // _owner, above.  T2 notices that the EntryList is populated, so it
1091       // reacquires the lock and then finds itself on the EntryList.
1092       // Given all that, we have to tolerate the circumstance where "w" is
1093       // associated with Self.
1094       assert(w->TState == ObjectWaiter::TS_ENTER, "invariant");
1095       ExitEpilog(Self, w);
1096       return;
1097     }
1098 
1099     // If we find that both _cxq and EntryList are null then just
1100     // re-run the exit protocol from the top.
1101     w = _cxq;
1102     if (w == NULL) continue;
1103 
1104     // Drain _cxq into EntryList - bulk transfer.
1105     // First, detach _cxq.
1106     // The following loop is tantamount to: w = swap(&cxq, NULL)
1107     for (;;) {
1108       assert(w != NULL, "Invariant");
1109       ObjectWaiter * u = Atomic::cmpxchg((ObjectWaiter*)NULL, &_cxq, w);
1110       if (u == w) break;
1111       w = u;
1112     }
1113 
1114     assert(w != NULL, "invariant");
1115     assert(_EntryList == NULL, "invariant");
1116 
1117     // Convert the LIFO SLL anchored by _cxq into a DLL.
1118     // The list reorganization step operates in O(LENGTH(w)) time.
1119     // It's critical that this step operate quickly as
1120     // "Self" still holds the outer-lock, restricting parallelism
1121     // and effectively lengthening the critical section.
1122     // Invariant: s chases t chases u.
1123     // TODO-FIXME: consider changing EntryList from a DLL to a CDLL so
1124     // we have faster access to the tail.
1125 
1126     _EntryList = w;
1127     ObjectWaiter * q = NULL;
1128     ObjectWaiter * p;
1129     for (p = w; p != NULL; p = p->_next) {
1130       guarantee(p->TState == ObjectWaiter::TS_CXQ, "Invariant");
1131       p->TState = ObjectWaiter::TS_ENTER;
1132       p->_prev = q;
1133       q = p;
1134     }
1135 
1136     // In 1-0 mode we need: ST EntryList; MEMBAR #storestore; ST _owner = NULL
1137     // The MEMBAR is satisfied by the release_store() operation in ExitEpilog().
1138 
1139     // See if we can abdicate to a spinner instead of waking a thread.
1140     // A primary goal of the implementation is to reduce the
1141     // context-switch rate.
1142     if (_succ != NULL) continue;
1143 
1144     w = _EntryList;
1145     if (w != NULL) {
1146       guarantee(w->TState == ObjectWaiter::TS_ENTER, "invariant");
1147       ExitEpilog(Self, w);
1148       return;
1149     }
1150   }
1151 }
1152 
1153 // ExitSuspendEquivalent:
1154 // A faster alternate to handle_special_suspend_equivalent_condition()
1155 //
1156 // handle_special_suspend_equivalent_condition() unconditionally
1157 // acquires the SR_lock.  On some platforms uncontended MutexLocker()
1158 // operations have high latency.  Note that in ::enter() we call HSSEC
1159 // while holding the monitor, so we effectively lengthen the critical sections.
1160 //
1161 // There are a number of possible solutions:
1162 //
1163 // A.  To ameliorate the problem we might also defer state transitions
1164 //     to as late as possible -- just prior to parking.
1165 //     Given that, we'd call HSSEC after having returned from park(),
1166 //     but before attempting to acquire the monitor.  This is only a
1167 //     partial solution.  It avoids calling HSSEC while holding the
1168 //     monitor (good), but it still increases successor reacquisition latency --
1169 //     the interval between unparking a successor and the time the successor
1170 //     resumes and retries the lock.  See ReenterI(), which defers state transitions.
1171 //     If we use this technique we can also avoid EnterI()-exit() loop
1172 //     in ::enter() where we iteratively drop the lock and then attempt
1173 //     to reacquire it after suspending.
1174 //
1175 // B.  In the future we might fold all the suspend bits into a
1176 //     composite per-thread suspend flag and then update it with CAS().
1177 //     Alternately, a Dekker-like mechanism with multiple variables
1178 //     would suffice:
1179 //       ST Self->_suspend_equivalent = false
1180 //       MEMBAR
1181 //       LD Self_>_suspend_flags
1182 
1183 bool ObjectMonitor::ExitSuspendEquivalent(JavaThread * jSelf) {
1184   return jSelf->handle_special_suspend_equivalent_condition();
1185 }
1186 
1187 
1188 void ObjectMonitor::ExitEpilog(Thread * Self, ObjectWaiter * Wakee) {
1189   assert(_owner == Self, "invariant");
1190 
1191   // Exit protocol:
1192   // 1. ST _succ = wakee
1193   // 2. membar #loadstore|#storestore;
1194   // 2. ST _owner = NULL
1195   // 3. unpark(wakee)
1196 
1197   _succ = Wakee->_thread;
1198   ParkEvent * Trigger = Wakee->_event;
1199 
1200   // Hygiene -- once we've set _owner = NULL we can't safely dereference Wakee again.
1201   // The thread associated with Wakee may have grabbed the lock and "Wakee" may be
1202   // out-of-scope (non-extant).
1203   Wakee  = NULL;
1204 
1205   // Drop the lock
1206   OrderAccess::release_store(&_owner, (void*)NULL);
1207   OrderAccess::fence();                               // ST _owner vs LD in unpark()
1208 
1209   DTRACE_MONITOR_PROBE(contended__exit, this, object(), Self);
1210   Trigger->unpark();
1211 
1212   // Maintain stats and report events to JVMTI
1213   OM_PERFDATA_OP(Parks, inc());
1214 }
1215 
1216 
1217 // -----------------------------------------------------------------------------
1218 // Class Loader deadlock handling.
1219 //
1220 // complete_exit exits a lock returning recursion count
1221 // complete_exit/reenter operate as a wait without waiting
1222 // complete_exit requires an inflated monitor
1223 // The _owner field is not always the Thread addr even with an
1224 // inflated monitor, e.g. the monitor can be inflated by a non-owning
1225 // thread due to contention.
1226 intptr_t ObjectMonitor::complete_exit(TRAPS) {
1227   Thread * const Self = THREAD;
1228   assert(Self->is_Java_thread(), "Must be Java thread!");
1229   JavaThread *jt = (JavaThread *)THREAD;
1230 
1231   assert(InitDone, "Unexpectedly not initialized");
1232 
1233   if (THREAD != _owner) {
1234     if (THREAD->is_lock_owned ((address)_owner)) {
1235       assert(_recursions == 0, "internal state error");
1236       _owner = THREAD;   // Convert from basiclock addr to Thread addr
1237       _recursions = 0;
1238     }
1239   }
1240 
1241   guarantee(Self == _owner, "complete_exit not owner");
1242   intptr_t save = _recursions; // record the old recursion count
1243   _recursions = 0;        // set the recursion level to be 0
1244   exit(true, Self);           // exit the monitor
1245   guarantee(_owner != Self, "invariant");
1246   return save;
1247 }
1248 
1249 // reenter() enters a lock and sets recursion count
1250 // complete_exit/reenter operate as a wait without waiting
1251 void ObjectMonitor::reenter(intptr_t recursions, TRAPS) {
1252   Thread * const Self = THREAD;
1253   assert(Self->is_Java_thread(), "Must be Java thread!");
1254   JavaThread *jt = (JavaThread *)THREAD;
1255 
1256   guarantee(_owner != Self, "reenter already owner");
1257   enter(THREAD);
1258   // Entered the monitor.
1259   guarantee(_recursions == 0, "reenter recursion");
1260   _recursions = recursions;
1261 }
1262 
1263 
1264 // -----------------------------------------------------------------------------
1265 // A macro is used below because there may already be a pending
1266 // exception which should not abort the execution of the routines
1267 // which use this (which is why we don't put this into check_slow and
1268 // call it with a CHECK argument).
1269 
1270 #define CHECK_OWNER()                                                       \
1271   do {                                                                      \
1272     if (THREAD != _owner) {                                                 \
1273       if (THREAD->is_lock_owned((address) _owner)) {                        \
1274         _owner = THREAD;  /* Convert from basiclock addr to Thread addr */  \
1275         _recursions = 0;                                                    \
1276       } else {                                                              \
1277         THROW(vmSymbols::java_lang_IllegalMonitorStateException());         \
1278       }                                                                     \
1279     }                                                                       \
1280   } while (false)
1281 
1282 // check_slow() is a misnomer.  It's called to simply to throw an IMSX exception.
1283 // TODO-FIXME: remove check_slow() -- it's likely dead.
1284 
1285 void ObjectMonitor::check_slow(TRAPS) {
1286   assert(THREAD != _owner && !THREAD->is_lock_owned((address) _owner), "must not be owner");
1287   THROW_MSG(vmSymbols::java_lang_IllegalMonitorStateException(), "current thread not owner");
1288 }
1289 
1290 static void post_monitor_wait_event(EventJavaMonitorWait* event,
1291                                     ObjectMonitor* monitor,
1292                                     jlong notifier_tid,
1293                                     jlong timeout,
1294                                     bool timedout) {
1295   assert(event != NULL, "invariant");
1296   assert(monitor != NULL, "invariant");
1297   event->set_monitorClass(((oop)monitor->object())->klass());
1298   event->set_timeout(timeout);
1299   event->set_address((uintptr_t)monitor->object_addr());
1300   event->set_notifier(notifier_tid);
1301   event->set_timedOut(timedout);
1302   event->commit();
1303 }
1304 
1305 // -----------------------------------------------------------------------------
1306 // Wait/Notify/NotifyAll
1307 //
1308 // Note: a subset of changes to ObjectMonitor::wait()
1309 // will need to be replicated in complete_exit
1310 void ObjectMonitor::wait(jlong millis, bool interruptible, TRAPS) {
1311   Thread * const Self = THREAD;
1312   assert(Self->is_Java_thread(), "Must be Java thread!");
1313   JavaThread *jt = (JavaThread *)THREAD;
1314 
1315   assert(InitDone, "Unexpectedly not initialized");
1316 
1317   // Throw IMSX or IEX.
1318   CHECK_OWNER();
1319 
1320   EventJavaMonitorWait event;
1321 
1322   // check for a pending interrupt
1323   if (interruptible && Thread::is_interrupted(Self, true) && !HAS_PENDING_EXCEPTION) {
1324     // post monitor waited event.  Note that this is past-tense, we are done waiting.
1325     if (JvmtiExport::should_post_monitor_waited()) {
1326       // Note: 'false' parameter is passed here because the
1327       // wait was not timed out due to thread interrupt.
1328       JvmtiExport::post_monitor_waited(jt, this, false);
1329 
1330       // In this short circuit of the monitor wait protocol, the
1331       // current thread never drops ownership of the monitor and
1332       // never gets added to the wait queue so the current thread
1333       // cannot be made the successor. This means that the
1334       // JVMTI_EVENT_MONITOR_WAITED event handler cannot accidentally
1335       // consume an unpark() meant for the ParkEvent associated with
1336       // this ObjectMonitor.
1337     }
1338     if (event.should_commit()) {
1339       post_monitor_wait_event(&event, this, 0, millis, false);
1340     }
1341     THROW(vmSymbols::java_lang_InterruptedException());
1342     return;
1343   }
1344 
1345   assert(Self->_Stalled == 0, "invariant");
1346   Self->_Stalled = intptr_t(this);
1347   jt->set_current_waiting_monitor(this);
1348 
1349   // create a node to be put into the queue
1350   // Critically, after we reset() the event but prior to park(), we must check
1351   // for a pending interrupt.
1352   ObjectWaiter node(Self);
1353   node.TState = ObjectWaiter::TS_WAIT;
1354   Self->_ParkEvent->reset();
1355   OrderAccess::fence();          // ST into Event; membar ; LD interrupted-flag
1356 
1357   // Enter the waiting queue, which is a circular doubly linked list in this case
1358   // but it could be a priority queue or any data structure.
1359   // _WaitSetLock protects the wait queue.  Normally the wait queue is accessed only
1360   // by the the owner of the monitor *except* in the case where park()
1361   // returns because of a timeout of interrupt.  Contention is exceptionally rare
1362   // so we use a simple spin-lock instead of a heavier-weight blocking lock.
1363 
1364   Thread::SpinAcquire(&_WaitSetLock, "WaitSet - add");
1365   AddWaiter(&node);
1366   Thread::SpinRelease(&_WaitSetLock);
1367 
1368   _Responsible = NULL;
1369 
1370   intptr_t save = _recursions; // record the old recursion count
1371   _waiters++;                  // increment the number of waiters
1372   _recursions = 0;             // set the recursion level to be 1
1373   exit(true, Self);                    // exit the monitor
1374   guarantee(_owner != Self, "invariant");
1375 
1376   // The thread is on the WaitSet list - now park() it.
1377   // On MP systems it's conceivable that a brief spin before we park
1378   // could be profitable.
1379   //
1380   // TODO-FIXME: change the following logic to a loop of the form
1381   //   while (!timeout && !interrupted && _notified == 0) park()
1382 
1383   int ret = OS_OK;
1384   int WasNotified = 0;
1385   { // State transition wrappers
1386     OSThread* osthread = Self->osthread();
1387     OSThreadWaitState osts(osthread, true);
1388     {
1389       ThreadBlockInVM tbivm(jt);
1390       // Thread is in thread_blocked state and oop access is unsafe.
1391       jt->set_suspend_equivalent();
1392 
1393       if (interruptible && (Thread::is_interrupted(THREAD, false) || HAS_PENDING_EXCEPTION)) {
1394         // Intentionally empty
1395       } else if (node._notified == 0) {
1396         if (millis <= 0) {
1397           Self->_ParkEvent->park();
1398         } else {
1399           ret = Self->_ParkEvent->park(millis);
1400         }
1401       }
1402 
1403       // were we externally suspended while we were waiting?
1404       if (ExitSuspendEquivalent (jt)) {
1405         // TODO-FIXME: add -- if succ == Self then succ = null.
1406         jt->java_suspend_self();
1407       }
1408 
1409     } // Exit thread safepoint: transition _thread_blocked -> _thread_in_vm
1410 
1411     // Node may be on the WaitSet, the EntryList (or cxq), or in transition
1412     // from the WaitSet to the EntryList.
1413     // See if we need to remove Node from the WaitSet.
1414     // We use double-checked locking to avoid grabbing _WaitSetLock
1415     // if the thread is not on the wait queue.
1416     //
1417     // Note that we don't need a fence before the fetch of TState.
1418     // In the worst case we'll fetch a old-stale value of TS_WAIT previously
1419     // written by the is thread. (perhaps the fetch might even be satisfied
1420     // by a look-aside into the processor's own store buffer, although given
1421     // the length of the code path between the prior ST and this load that's
1422     // highly unlikely).  If the following LD fetches a stale TS_WAIT value
1423     // then we'll acquire the lock and then re-fetch a fresh TState value.
1424     // That is, we fail toward safety.
1425 
1426     if (node.TState == ObjectWaiter::TS_WAIT) {
1427       Thread::SpinAcquire(&_WaitSetLock, "WaitSet - unlink");
1428       if (node.TState == ObjectWaiter::TS_WAIT) {
1429         DequeueSpecificWaiter(&node);       // unlink from WaitSet
1430         assert(node._notified == 0, "invariant");
1431         node.TState = ObjectWaiter::TS_RUN;
1432       }
1433       Thread::SpinRelease(&_WaitSetLock);
1434     }
1435 
1436     // The thread is now either on off-list (TS_RUN),
1437     // on the EntryList (TS_ENTER), or on the cxq (TS_CXQ).
1438     // The Node's TState variable is stable from the perspective of this thread.
1439     // No other threads will asynchronously modify TState.
1440     guarantee(node.TState != ObjectWaiter::TS_WAIT, "invariant");
1441     OrderAccess::loadload();
1442     if (_succ == Self) _succ = NULL;
1443     WasNotified = node._notified;
1444 
1445     // Reentry phase -- reacquire the monitor.
1446     // re-enter contended monitor after object.wait().
1447     // retain OBJECT_WAIT state until re-enter successfully completes
1448     // Thread state is thread_in_vm and oop access is again safe,
1449     // although the raw address of the object may have changed.
1450     // (Don't cache naked oops over safepoints, of course).
1451 
1452     // post monitor waited event. Note that this is past-tense, we are done waiting.
1453     if (JvmtiExport::should_post_monitor_waited()) {
1454       JvmtiExport::post_monitor_waited(jt, this, ret == OS_TIMEOUT);
1455 
1456       if (node._notified != 0 && _succ == Self) {
1457         // In this part of the monitor wait-notify-reenter protocol it
1458         // is possible (and normal) for another thread to do a fastpath
1459         // monitor enter-exit while this thread is still trying to get
1460         // to the reenter portion of the protocol.
1461         //
1462         // The ObjectMonitor was notified and the current thread is
1463         // the successor which also means that an unpark() has already
1464         // been done. The JVMTI_EVENT_MONITOR_WAITED event handler can
1465         // consume the unpark() that was done when the successor was
1466         // set because the same ParkEvent is shared between Java
1467         // monitors and JVM/TI RawMonitors (for now).
1468         //
1469         // We redo the unpark() to ensure forward progress, i.e., we
1470         // don't want all pending threads hanging (parked) with none
1471         // entering the unlocked monitor.
1472         node._event->unpark();
1473       }
1474     }
1475 
1476     if (event.should_commit()) {
1477       post_monitor_wait_event(&event, this, node._notifier_tid, millis, ret == OS_TIMEOUT);
1478     }
1479 
1480     OrderAccess::fence();
1481 
1482     assert(Self->_Stalled != 0, "invariant");
1483     Self->_Stalled = 0;
1484 
1485     assert(_owner != Self, "invariant");
1486     ObjectWaiter::TStates v = node.TState;
1487     if (v == ObjectWaiter::TS_RUN) {
1488       enter(Self);
1489     } else {
1490       guarantee(v == ObjectWaiter::TS_ENTER || v == ObjectWaiter::TS_CXQ, "invariant");
1491       ReenterI(Self, &node);
1492       node.wait_reenter_end(this);
1493     }
1494 
1495     // Self has reacquired the lock.
1496     // Lifecycle - the node representing Self must not appear on any queues.
1497     // Node is about to go out-of-scope, but even if it were immortal we wouldn't
1498     // want residual elements associated with this thread left on any lists.
1499     guarantee(node.TState == ObjectWaiter::TS_RUN, "invariant");
1500     assert(_owner == Self, "invariant");
1501     assert(_succ != Self, "invariant");
1502   } // OSThreadWaitState()
1503 
1504   jt->set_current_waiting_monitor(NULL);
1505 
1506   guarantee(_recursions == 0, "invariant");
1507   _recursions = save;     // restore the old recursion count
1508   _waiters--;             // decrement the number of waiters
1509 
1510   // Verify a few postconditions
1511   assert(_owner == Self, "invariant");
1512   assert(_succ != Self, "invariant");
1513   assert(((oop)(object()))->mark() == markOopDesc::encode(this), "invariant");
1514 
1515   // check if the notification happened
1516   if (!WasNotified) {
1517     // no, it could be timeout or Thread.interrupt() or both
1518     // check for interrupt event, otherwise it is timeout
1519     if (interruptible && Thread::is_interrupted(Self, true) && !HAS_PENDING_EXCEPTION) {
1520       THROW(vmSymbols::java_lang_InterruptedException());
1521     }
1522   }
1523 
1524   // NOTE: Spurious wake up will be consider as timeout.
1525   // Monitor notify has precedence over thread interrupt.
1526 }
1527 
1528 
1529 // Consider:
1530 // If the lock is cool (cxq == null && succ == null) and we're on an MP system
1531 // then instead of transferring a thread from the WaitSet to the EntryList
1532 // we might just dequeue a thread from the WaitSet and directly unpark() it.
1533 
1534 void ObjectMonitor::INotify(Thread * Self) {
1535   Thread::SpinAcquire(&_WaitSetLock, "WaitSet - notify");
1536   ObjectWaiter * iterator = DequeueWaiter();
1537   if (iterator != NULL) {
1538     guarantee(iterator->TState == ObjectWaiter::TS_WAIT, "invariant");
1539     guarantee(iterator->_notified == 0, "invariant");
1540     // Disposition - what might we do with iterator ?
1541     // a.  add it directly to the EntryList - either tail (policy == 1)
1542     //     or head (policy == 0).
1543     // b.  push it onto the front of the _cxq (policy == 2).
1544     // For now we use (b).
1545 
1546     iterator->TState = ObjectWaiter::TS_ENTER;
1547 
1548     iterator->_notified = 1;
1549     iterator->_notifier_tid = JFR_THREAD_ID(Self);
1550 
1551     ObjectWaiter * list = _EntryList;
1552     if (list != NULL) {
1553       assert(list->_prev == NULL, "invariant");
1554       assert(list->TState == ObjectWaiter::TS_ENTER, "invariant");
1555       assert(list != iterator, "invariant");
1556     }
1557 
1558     // prepend to cxq
1559     if (list == NULL) {
1560       iterator->_next = iterator->_prev = NULL;
1561       _EntryList = iterator;
1562     } else {
1563       iterator->TState = ObjectWaiter::TS_CXQ;
1564       for (;;) {
1565         ObjectWaiter * front = _cxq;
1566         iterator->_next = front;
1567         if (Atomic::cmpxchg(iterator, &_cxq, front) == front) {
1568           break;
1569         }
1570       }
1571     }
1572 
1573     // _WaitSetLock protects the wait queue, not the EntryList.  We could
1574     // move the add-to-EntryList operation, above, outside the critical section
1575     // protected by _WaitSetLock.  In practice that's not useful.  With the
1576     // exception of  wait() timeouts and interrupts the monitor owner
1577     // is the only thread that grabs _WaitSetLock.  There's almost no contention
1578     // on _WaitSetLock so it's not profitable to reduce the length of the
1579     // critical section.
1580 
1581     iterator->wait_reenter_begin(this);
1582   }
1583   Thread::SpinRelease(&_WaitSetLock);
1584 }
1585 
1586 // Consider: a not-uncommon synchronization bug is to use notify() when
1587 // notifyAll() is more appropriate, potentially resulting in stranded
1588 // threads; this is one example of a lost wakeup. A useful diagnostic
1589 // option is to force all notify() operations to behave as notifyAll().
1590 //
1591 // Note: We can also detect many such problems with a "minimum wait".
1592 // When the "minimum wait" is set to a small non-zero timeout value
1593 // and the program does not hang whereas it did absent "minimum wait",
1594 // that suggests a lost wakeup bug.
1595 
1596 void ObjectMonitor::notify(TRAPS) {
1597   CHECK_OWNER();
1598   if (_WaitSet == NULL) {
1599     return;
1600   }
1601   DTRACE_MONITOR_PROBE(notify, this, object(), THREAD);
1602   INotify(THREAD);
1603   OM_PERFDATA_OP(Notifications, inc(1));
1604 }
1605 
1606 
1607 // The current implementation of notifyAll() transfers the waiters one-at-a-time
1608 // from the waitset to the EntryList. This could be done more efficiently with a
1609 // single bulk transfer but in practice it's not time-critical. Beware too,
1610 // that in prepend-mode we invert the order of the waiters. Let's say that the
1611 // waitset is "ABCD" and the EntryList is "XYZ". After a notifyAll() in prepend
1612 // mode the waitset will be empty and the EntryList will be "DCBAXYZ".
1613 
1614 void ObjectMonitor::notifyAll(TRAPS) {
1615   CHECK_OWNER();
1616   if (_WaitSet == NULL) {
1617     return;
1618   }
1619 
1620   DTRACE_MONITOR_PROBE(notifyAll, this, object(), THREAD);
1621   int tally = 0;
1622   while (_WaitSet != NULL) {
1623     tally++;
1624     INotify(THREAD);
1625   }
1626 
1627   OM_PERFDATA_OP(Notifications, inc(tally));
1628 }
1629 
1630 // -----------------------------------------------------------------------------
1631 // Adaptive Spinning Support
1632 //
1633 // Adaptive spin-then-block - rational spinning
1634 //
1635 // Note that we spin "globally" on _owner with a classic SMP-polite TATAS
1636 // algorithm.  On high order SMP systems it would be better to start with
1637 // a brief global spin and then revert to spinning locally.  In the spirit of MCS/CLH,
1638 // a contending thread could enqueue itself on the cxq and then spin locally
1639 // on a thread-specific variable such as its ParkEvent._Event flag.
1640 // That's left as an exercise for the reader.  Note that global spinning is
1641 // not problematic on Niagara, as the L2 cache serves the interconnect and
1642 // has both low latency and massive bandwidth.
1643 //
1644 // Broadly, we can fix the spin frequency -- that is, the % of contended lock
1645 // acquisition attempts where we opt to spin --  at 100% and vary the spin count
1646 // (duration) or we can fix the count at approximately the duration of
1647 // a context switch and vary the frequency.   Of course we could also
1648 // vary both satisfying K == Frequency * Duration, where K is adaptive by monitor.
1649 // For a description of 'Adaptive spin-then-block mutual exclusion in
1650 // multi-threaded processing,' see U.S. Pat. No. 8046758.
1651 //
1652 // This implementation varies the duration "D", where D varies with
1653 // the success rate of recent spin attempts. (D is capped at approximately
1654 // length of a round-trip context switch).  The success rate for recent
1655 // spin attempts is a good predictor of the success rate of future spin
1656 // attempts.  The mechanism adapts automatically to varying critical
1657 // section length (lock modality), system load and degree of parallelism.
1658 // D is maintained per-monitor in _SpinDuration and is initialized
1659 // optimistically.  Spin frequency is fixed at 100%.
1660 //
1661 // Note that _SpinDuration is volatile, but we update it without locks
1662 // or atomics.  The code is designed so that _SpinDuration stays within
1663 // a reasonable range even in the presence of races.  The arithmetic
1664 // operations on _SpinDuration are closed over the domain of legal values,
1665 // so at worst a race will install and older but still legal value.
1666 // At the very worst this introduces some apparent non-determinism.
1667 // We might spin when we shouldn't or vice-versa, but since the spin
1668 // count are relatively short, even in the worst case, the effect is harmless.
1669 //
1670 // Care must be taken that a low "D" value does not become an
1671 // an absorbing state.  Transient spinning failures -- when spinning
1672 // is overall profitable -- should not cause the system to converge
1673 // on low "D" values.  We want spinning to be stable and predictable
1674 // and fairly responsive to change and at the same time we don't want
1675 // it to oscillate, become metastable, be "too" non-deterministic,
1676 // or converge on or enter undesirable stable absorbing states.
1677 //
1678 // We implement a feedback-based control system -- using past behavior
1679 // to predict future behavior.  We face two issues: (a) if the
1680 // input signal is random then the spin predictor won't provide optimal
1681 // results, and (b) if the signal frequency is too high then the control
1682 // system, which has some natural response lag, will "chase" the signal.
1683 // (b) can arise from multimodal lock hold times.  Transient preemption
1684 // can also result in apparent bimodal lock hold times.
1685 // Although sub-optimal, neither condition is particularly harmful, as
1686 // in the worst-case we'll spin when we shouldn't or vice-versa.
1687 // The maximum spin duration is rather short so the failure modes aren't bad.
1688 // To be conservative, I've tuned the gain in system to bias toward
1689 // _not spinning.  Relatedly, the system can sometimes enter a mode where it
1690 // "rings" or oscillates between spinning and not spinning.  This happens
1691 // when spinning is just on the cusp of profitability, however, so the
1692 // situation is not dire.  The state is benign -- there's no need to add
1693 // hysteresis control to damp the transition rate between spinning and
1694 // not spinning.
1695 
1696 // Spinning: Fixed frequency (100%), vary duration
1697 int ObjectMonitor::TrySpin(Thread * Self) {
1698   // Dumb, brutal spin.  Good for comparative measurements against adaptive spinning.
1699   int ctr = Knob_FixedSpin;
1700   if (ctr != 0) {
1701     while (--ctr >= 0) {
1702       if (TryLock(Self) > 0) return 1;
1703       SpinPause();
1704     }
1705     return 0;
1706   }
1707 
1708   for (ctr = Knob_PreSpin + 1; --ctr >= 0;) {
1709     if (TryLock(Self) > 0) {
1710       // Increase _SpinDuration ...
1711       // Note that we don't clamp SpinDuration precisely at SpinLimit.
1712       // Raising _SpurDuration to the poverty line is key.
1713       int x = _SpinDuration;
1714       if (x < Knob_SpinLimit) {
1715         if (x < Knob_Poverty) x = Knob_Poverty;
1716         _SpinDuration = x + Knob_BonusB;
1717       }
1718       return 1;
1719     }
1720     SpinPause();
1721   }
1722 
1723   // Admission control - verify preconditions for spinning
1724   //
1725   // We always spin a little bit, just to prevent _SpinDuration == 0 from
1726   // becoming an absorbing state.  Put another way, we spin briefly to
1727   // sample, just in case the system load, parallelism, contention, or lock
1728   // modality changed.
1729   //
1730   // Consider the following alternative:
1731   // Periodically set _SpinDuration = _SpinLimit and try a long/full
1732   // spin attempt.  "Periodically" might mean after a tally of
1733   // the # of failed spin attempts (or iterations) reaches some threshold.
1734   // This takes us into the realm of 1-out-of-N spinning, where we
1735   // hold the duration constant but vary the frequency.
1736 
1737   ctr = _SpinDuration;
1738   if (ctr <= 0) return 0;
1739 
1740   if (NotRunnable(Self, (Thread *) _owner)) {
1741     return 0;
1742   }
1743 
1744   // We're good to spin ... spin ingress.
1745   // CONSIDER: use Prefetch::write() to avoid RTS->RTO upgrades
1746   // when preparing to LD...CAS _owner, etc and the CAS is likely
1747   // to succeed.
1748   if (_succ == NULL) {
1749     _succ = Self;
1750   }
1751   Thread * prv = NULL;
1752 
1753   // There are three ways to exit the following loop:
1754   // 1.  A successful spin where this thread has acquired the lock.
1755   // 2.  Spin failure with prejudice
1756   // 3.  Spin failure without prejudice
1757 
1758   while (--ctr >= 0) {
1759 
1760     // Periodic polling -- Check for pending GC
1761     // Threads may spin while they're unsafe.
1762     // We don't want spinning threads to delay the JVM from reaching
1763     // a stop-the-world safepoint or to steal cycles from GC.
1764     // If we detect a pending safepoint we abort in order that
1765     // (a) this thread, if unsafe, doesn't delay the safepoint, and (b)
1766     // this thread, if safe, doesn't steal cycles from GC.
1767     // This is in keeping with the "no loitering in runtime" rule.
1768     // We periodically check to see if there's a safepoint pending.
1769     if ((ctr & 0xFF) == 0) {
1770       if (SafepointMechanism::should_block(Self)) {
1771         goto Abort;           // abrupt spin egress
1772       }
1773       SpinPause();
1774     }
1775 
1776     // Probe _owner with TATAS
1777     // If this thread observes the monitor transition or flicker
1778     // from locked to unlocked to locked, then the odds that this
1779     // thread will acquire the lock in this spin attempt go down
1780     // considerably.  The same argument applies if the CAS fails
1781     // or if we observe _owner change from one non-null value to
1782     // another non-null value.   In such cases we might abort
1783     // the spin without prejudice or apply a "penalty" to the
1784     // spin count-down variable "ctr", reducing it by 100, say.
1785 
1786     Thread * ox = (Thread *) _owner;
1787     if (ox == NULL) {
1788       ox = (Thread*)Atomic::cmpxchg(Self, &_owner, (void*)NULL);
1789       if (ox == NULL) {
1790         // The CAS succeeded -- this thread acquired ownership
1791         // Take care of some bookkeeping to exit spin state.
1792         if (_succ == Self) {
1793           _succ = NULL;
1794         }
1795 
1796         // Increase _SpinDuration :
1797         // The spin was successful (profitable) so we tend toward
1798         // longer spin attempts in the future.
1799         // CONSIDER: factor "ctr" into the _SpinDuration adjustment.
1800         // If we acquired the lock early in the spin cycle it
1801         // makes sense to increase _SpinDuration proportionally.
1802         // Note that we don't clamp SpinDuration precisely at SpinLimit.
1803         int x = _SpinDuration;
1804         if (x < Knob_SpinLimit) {
1805           if (x < Knob_Poverty) x = Knob_Poverty;
1806           _SpinDuration = x + Knob_Bonus;
1807         }
1808         return 1;
1809       }
1810 
1811       // The CAS failed ... we can take any of the following actions:
1812       // * penalize: ctr -= CASPenalty
1813       // * exit spin with prejudice -- goto Abort;
1814       // * exit spin without prejudice.
1815       // * Since CAS is high-latency, retry again immediately.
1816       prv = ox;
1817       goto Abort;
1818     }
1819 
1820     // Did lock ownership change hands ?
1821     if (ox != prv && prv != NULL) {
1822       goto Abort;
1823     }
1824     prv = ox;
1825 
1826     // Abort the spin if the owner is not executing.
1827     // The owner must be executing in order to drop the lock.
1828     // Spinning while the owner is OFFPROC is idiocy.
1829     // Consider: ctr -= RunnablePenalty ;
1830     if (NotRunnable(Self, ox)) {
1831       goto Abort;
1832     }
1833     if (_succ == NULL) {
1834       _succ = Self;
1835     }
1836   }
1837 
1838   // Spin failed with prejudice -- reduce _SpinDuration.
1839   // TODO: Use an AIMD-like policy to adjust _SpinDuration.
1840   // AIMD is globally stable.
1841   {
1842     int x = _SpinDuration;
1843     if (x > 0) {
1844       // Consider an AIMD scheme like: x -= (x >> 3) + 100
1845       // This is globally sample and tends to damp the response.
1846       x -= Knob_Penalty;
1847       if (x < 0) x = 0;
1848       _SpinDuration = x;
1849     }
1850   }
1851 
1852  Abort:
1853   if (_succ == Self) {
1854     _succ = NULL;
1855     // Invariant: after setting succ=null a contending thread
1856     // must recheck-retry _owner before parking.  This usually happens
1857     // in the normal usage of TrySpin(), but it's safest
1858     // to make TrySpin() as foolproof as possible.
1859     OrderAccess::fence();
1860     if (TryLock(Self) > 0) return 1;
1861   }
1862   return 0;
1863 }
1864 
1865 // NotRunnable() -- informed spinning
1866 //
1867 // Don't bother spinning if the owner is not eligible to drop the lock.
1868 // Spin only if the owner thread is _thread_in_Java or _thread_in_vm.
1869 // The thread must be runnable in order to drop the lock in timely fashion.
1870 // If the _owner is not runnable then spinning will not likely be
1871 // successful (profitable).
1872 //
1873 // Beware -- the thread referenced by _owner could have died
1874 // so a simply fetch from _owner->_thread_state might trap.
1875 // Instead, we use SafeFetchXX() to safely LD _owner->_thread_state.
1876 // Because of the lifecycle issues, the _thread_state values
1877 // observed by NotRunnable() might be garbage.  NotRunnable must
1878 // tolerate this and consider the observed _thread_state value
1879 // as advisory.
1880 //
1881 // Beware too, that _owner is sometimes a BasicLock address and sometimes
1882 // a thread pointer.
1883 // Alternately, we might tag the type (thread pointer vs basiclock pointer)
1884 // with the LSB of _owner.  Another option would be to probabilistically probe
1885 // the putative _owner->TypeTag value.
1886 //
1887 // Checking _thread_state isn't perfect.  Even if the thread is
1888 // in_java it might be blocked on a page-fault or have been preempted
1889 // and sitting on a ready/dispatch queue.
1890 //
1891 // The return value from NotRunnable() is *advisory* -- the
1892 // result is based on sampling and is not necessarily coherent.
1893 // The caller must tolerate false-negative and false-positive errors.
1894 // Spinning, in general, is probabilistic anyway.
1895 
1896 
1897 int ObjectMonitor::NotRunnable(Thread * Self, Thread * ox) {
1898   // Check ox->TypeTag == 2BAD.
1899   if (ox == NULL) return 0;
1900 
1901   // Avoid transitive spinning ...
1902   // Say T1 spins or blocks trying to acquire L.  T1._Stalled is set to L.
1903   // Immediately after T1 acquires L it's possible that T2, also
1904   // spinning on L, will see L.Owner=T1 and T1._Stalled=L.
1905   // This occurs transiently after T1 acquired L but before
1906   // T1 managed to clear T1.Stalled.  T2 does not need to abort
1907   // its spin in this circumstance.
1908   intptr_t BlockedOn = SafeFetchN((intptr_t *) &ox->_Stalled, intptr_t(1));
1909 
1910   if (BlockedOn == 1) return 1;
1911   if (BlockedOn != 0) {
1912     return BlockedOn != intptr_t(this) && _owner == ox;
1913   }
1914 
1915   assert(sizeof(((JavaThread *)ox)->_thread_state == sizeof(int)), "invariant");
1916   int jst = SafeFetch32((int *) &((JavaThread *) ox)->_thread_state, -1);;
1917   // consider also: jst != _thread_in_Java -- but that's overspecific.
1918   return jst == _thread_blocked || jst == _thread_in_native;
1919 }
1920 
1921 
1922 // -----------------------------------------------------------------------------
1923 // WaitSet management ...
1924 
1925 ObjectWaiter::ObjectWaiter(Thread* thread) {
1926   _next     = NULL;
1927   _prev     = NULL;
1928   _notified = 0;
1929   _notifier_tid = 0;
1930   TState    = TS_RUN;
1931   _thread   = thread;
1932   _event    = thread->_ParkEvent;
1933   _active   = false;
1934   assert(_event != NULL, "invariant");
1935 }
1936 
1937 void ObjectWaiter::wait_reenter_begin(ObjectMonitor * const mon) {
1938   JavaThread *jt = (JavaThread *)this->_thread;
1939   _active = JavaThreadBlockedOnMonitorEnterState::wait_reenter_begin(jt, mon);
1940 }
1941 
1942 void ObjectWaiter::wait_reenter_end(ObjectMonitor * const mon) {
1943   JavaThread *jt = (JavaThread *)this->_thread;
1944   JavaThreadBlockedOnMonitorEnterState::wait_reenter_end(jt, _active);
1945 }
1946 
1947 inline void ObjectMonitor::AddWaiter(ObjectWaiter* node) {
1948   assert(node != NULL, "should not add NULL node");
1949   assert(node->_prev == NULL, "node already in list");
1950   assert(node->_next == NULL, "node already in list");
1951   // put node at end of queue (circular doubly linked list)
1952   if (_WaitSet == NULL) {
1953     _WaitSet = node;
1954     node->_prev = node;
1955     node->_next = node;
1956   } else {
1957     ObjectWaiter* head = _WaitSet;
1958     ObjectWaiter* tail = head->_prev;
1959     assert(tail->_next == head, "invariant check");
1960     tail->_next = node;
1961     head->_prev = node;
1962     node->_next = head;
1963     node->_prev = tail;
1964   }
1965 }
1966 
1967 inline ObjectWaiter* ObjectMonitor::DequeueWaiter() {
1968   // dequeue the very first waiter
1969   ObjectWaiter* waiter = _WaitSet;
1970   if (waiter) {
1971     DequeueSpecificWaiter(waiter);
1972   }
1973   return waiter;
1974 }
1975 
1976 inline void ObjectMonitor::DequeueSpecificWaiter(ObjectWaiter* node) {
1977   assert(node != NULL, "should not dequeue NULL node");
1978   assert(node->_prev != NULL, "node already removed from list");
1979   assert(node->_next != NULL, "node already removed from list");
1980   // when the waiter has woken up because of interrupt,
1981   // timeout or other spurious wake-up, dequeue the
1982   // waiter from waiting list
1983   ObjectWaiter* next = node->_next;
1984   if (next == node) {
1985     assert(node->_prev == node, "invariant check");
1986     _WaitSet = NULL;
1987   } else {
1988     ObjectWaiter* prev = node->_prev;
1989     assert(prev->_next == node, "invariant check");
1990     assert(next->_prev == node, "invariant check");
1991     next->_prev = prev;
1992     prev->_next = next;
1993     if (_WaitSet == node) {
1994       _WaitSet = next;
1995     }
1996   }
1997   node->_next = NULL;
1998   node->_prev = NULL;
1999 }
2000 
2001 // -----------------------------------------------------------------------------
2002 // PerfData support
2003 PerfCounter * ObjectMonitor::_sync_ContendedLockAttempts       = NULL;
2004 PerfCounter * ObjectMonitor::_sync_FutileWakeups               = NULL;
2005 PerfCounter * ObjectMonitor::_sync_Parks                       = NULL;
2006 PerfCounter * ObjectMonitor::_sync_Notifications               = NULL;
2007 PerfCounter * ObjectMonitor::_sync_Inflations                  = NULL;
2008 PerfCounter * ObjectMonitor::_sync_Deflations                  = NULL;
2009 PerfLongVariable * ObjectMonitor::_sync_MonExtant              = NULL;
2010 
2011 // One-shot global initialization for the sync subsystem.
2012 // We could also defer initialization and initialize on-demand
2013 // the first time we call ObjectSynchronizer::inflate().
2014 // Initialization would be protected - like so many things - by
2015 // the MonitorCache_lock.
2016 
2017 void ObjectMonitor::Initialize() {
2018   assert(!InitDone, "invariant");
2019 
2020   if (!os::is_MP()) {
2021     Knob_SpinLimit = 0;
2022     Knob_PreSpin   = 0;
2023     Knob_FixedSpin = -1;
2024   }
2025 
2026   if (UsePerfData) {
2027     EXCEPTION_MARK;
2028 #define NEWPERFCOUNTER(n)                                                \
2029   {                                                                      \
2030     n = PerfDataManager::create_counter(SUN_RT, #n, PerfData::U_Events,  \
2031                                         CHECK);                          \
2032   }
2033 #define NEWPERFVARIABLE(n)                                                \
2034   {                                                                       \
2035     n = PerfDataManager::create_variable(SUN_RT, #n, PerfData::U_Events,  \
2036                                          CHECK);                          \
2037   }
2038     NEWPERFCOUNTER(_sync_Inflations);
2039     NEWPERFCOUNTER(_sync_Deflations);
2040     NEWPERFCOUNTER(_sync_ContendedLockAttempts);
2041     NEWPERFCOUNTER(_sync_FutileWakeups);
2042     NEWPERFCOUNTER(_sync_Parks);
2043     NEWPERFCOUNTER(_sync_Notifications);
2044     NEWPERFVARIABLE(_sync_MonExtant);
2045 #undef NEWPERFCOUNTER
2046 #undef NEWPERFVARIABLE
2047   }
2048 
2049   DEBUG_ONLY(InitDone = true;)
2050 }
2051 
2052 // For internal use by ObjectSynchronizer::monitors_iterate().
2053 ObjectMonitorHandle::ObjectMonitorHandle(ObjectMonitor * om_ptr) {
2054   om_ptr->inc_ref_count();
2055   _om_ptr = om_ptr;
2056 }
2057 
2058 ObjectMonitorHandle::~ObjectMonitorHandle() {
2059   if (_om_ptr != NULL) {
2060     _om_ptr->dec_ref_count();
2061     _om_ptr = NULL;
2062   }
2063 }
2064 
2065 // Save the ObjectMonitor* associated with the specified markOop and
2066 // increment the ref_count. This function should only be called if
2067 // the caller has verified mark->has_monitor() == true. The object
2068 // parameter is needed to verify that ObjectMonitor* has not been
2069 // deflated and reused for another object.
2070 //
2071 // This function returns true if the ObjectMonitor* has been safely
2072 // saved. This function returns false if we have lost a race with
2073 // async deflation; the caller should retry as appropriate.
2074 //
2075 bool ObjectMonitorHandle::save_om_ptr(oop object, markOop mark) {
2076   guarantee(mark->has_monitor(), "sanity check: mark=" INTPTR_FORMAT,
2077             p2i(mark));
2078 
2079   ObjectMonitor * om_ptr = mark->monitor();
2080   om_ptr->inc_ref_count();
2081 
2082   if (AsyncDeflateIdleMonitors) {
2083     // Race here if monitor is not owned! The above ref_count bump
2084     // will cause subsequent async deflation to skip it. However,
2085     // previous or concurrent async deflation is a race.
2086     if (om_ptr->_owner == DEFLATER_MARKER && om_ptr->ref_count() <= 0) {
2087       // Async deflation is in progress and our ref_count increment
2088       // above lost the race to async deflation. Attempt to restore
2089       // the header/dmw to the object's header so that we only retry
2090       // once if the deflater thread happens to be slow.
2091       om_ptr->install_displaced_markword_in_object(object);
2092       om_ptr->dec_ref_count();
2093       return false;
2094     }
2095     // The ObjectMonitor could have been deflated and reused for
2096     // another object before we bumped the ref_count so make sure
2097     // our object still refers to this ObjectMonitor.
2098     const markOop tmp = object->mark();
2099     if (!tmp->has_monitor() || tmp->monitor() != om_ptr) {
2100       // Async deflation and reuse won the race so we have to retry.
2101       // Skip object header restoration since that's already done.
2102       om_ptr->dec_ref_count();
2103       return false;
2104     }
2105   }
2106 
2107   ADIM_guarantee(_om_ptr == NULL, "sanity check: _om_ptr=" INTPTR_FORMAT,
2108                  p2i(_om_ptr));
2109   _om_ptr = om_ptr;
2110   return true;
2111 }
2112 
2113 // For internal use by ObjectSynchronizer::inflate().
2114 void ObjectMonitorHandle::set_om_ptr(ObjectMonitor * om_ptr) {
2115   if (_om_ptr == NULL) {
2116     ADIM_guarantee(om_ptr != NULL, "cannot clear an unset om_ptr");
2117     om_ptr->inc_ref_count();
2118     _om_ptr = om_ptr;
2119   } else {
2120     ADIM_guarantee(om_ptr == NULL, "can only clear a set om_ptr");
2121     _om_ptr->dec_ref_count();
2122     _om_ptr = NULL;
2123   }
2124 }
2125 
2126 void ObjectMonitor::print_on(outputStream* st) const {
2127   // The minimal things to print for markOop printing, more can be added for debugging and logging.
2128   st->print("{contentions=0x%08x,waiters=0x%08x"
2129             ",recursions=" INTPTR_FORMAT ",owner=" INTPTR_FORMAT "}",
2130             contentions(), waiters(), recursions(),
2131             p2i(owner()));
2132 }
2133 void ObjectMonitor::print() const { print_on(tty); }