< 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 >