< prev index next >

src/hotspot/share/runtime/objectMonitor.hpp

Print this page
rev 57232 : v2.00 -> v2.08 (CR8/v2.08/11-for-jdk14) patches combined into one; merge with jdk-14+25 snapshot; merge with jdk-14+26 snapshot.
rev 57233 : See CR8-to-CR9-changes; merge with 8230876.patch (2019.11.15); merge with jdk-14+25 snapshot; fuzzy merge with jdk-14+26 snapshot.

@@ -158,17 +158,17 @@
   // can have busy multi-threaded access. _previous_owner_tid is only
   // changed by ObjectMonitor::exit() so it is a good choice to share the
   // cache line with _owner.
   DEFINE_PAD_MINUS_SIZE(1, OM_CACHE_LINE_SIZE, sizeof(void* volatile) +
                         sizeof(volatile jlong));
-  volatile jint _ref_count;         // ref count for ObjectMonitor* and used by the async deflation
+  jint _ref_count;                  // ref count for ObjectMonitor* and used by the async deflation
                                     // protocol. See ObjectSynchronizer::deflate_monitor_using_JT().
   // Separate _ref_count and _next_om on different cache lines since
   // both can have busy multi-threaded access.
   DEFINE_PAD_MINUS_SIZE(2, OM_CACHE_LINE_SIZE, sizeof(volatile jint));
  public:                            // for static synchronizer.cpp access:
-  ObjectMonitor* volatile _next_om;  // Next ObjectMonitor* linkage
+  ObjectMonitor* _next_om;          // Next ObjectMonitor* linkage
  private:
   volatile intx _recursions;        // recursion count, 0 for first entry
   ObjectWaiter* volatile _EntryList;  // Threads blocked on entry or reentry.
                                       // The list is actually composed of WaitNodes,
                                       // acting as proxies for Threads.

@@ -270,12 +270,12 @@
   intptr_t  is_entered(Thread* current) const;
 
   void*     owner() const;  // Returns NULL if DEFLATER_MARKER is observed.
   // Returns true if owner field == DEFLATER_MARKER and false otherwise.
   bool      owner_is_DEFLATER_MARKER();
-  // Set _owner field to new_value; current value must match old_value.
-  void      set_owner_from(void* new_value, void* old_value);
+  // Clear _owner field; current value must match old_value.
+  void      release_clear_owner_with_barrier(void* old_value, bool needs_fence);
   // Simply set _owner field to new_value; current value must match old_value.
   void      simply_set_owner_from(void* new_value, void* old_value);
   // Simply set _owner field to new_value; current value must match old_value1 or old_value2.
   void      simply_set_owner_from(void* new_value, void* old_value1, void* old_value2);
   // Simply set _owner field to self; current value must match basic_lock_p.

@@ -309,11 +309,13 @@
   void Recycle() {
     // TODO: add stronger asserts ...
     // _cxq == 0 _succ == NULL _owner == NULL _waiters == 0
     // _contentions == 0 EntryList  == NULL
     // _recursions == 0 _WaitSet == NULL
-    DEBUG_ONLY(stringStream ss;)
+#ifdef ASSERT
+    stringStream ss;
+#endif
     assert((is_busy() | _recursions) == 0, "freeing in-use monitor: %s, "
            "recursions=" INTX_FORMAT, is_busy_to_string(&ss), _recursions);
     _succ          = NULL;
     _EntryList     = NULL;
     _cxq           = NULL;

@@ -346,13 +348,13 @@
   void      wait(jlong millis, bool interruptable, TRAPS);
   void      notify(TRAPS);
   void      notifyAll(TRAPS);
 
   void      print() const;
-//#ifdef ASSERT
+#ifdef ASSERT
   void      print_debug_style_on(outputStream* st) const;
-//#endif
+#endif
   void      print_on(outputStream* st) const;
 
 // Use the following at your own risk
   intx      complete_exit(TRAPS);
   void      reenter(intx recursions, TRAPS);
< prev index next >