< prev index next >

src/hotspot/share/runtime/thread.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.

*** 524,534 **** void set_native_thread_name(const char *name) { assert(Thread::current() == this, "set_native_thread_name can only be called on the current thread"); os::set_native_thread_name(name); } - ObjectMonitor** om_in_use_list_addr() { return (ObjectMonitor **)&om_in_use_list; } Monitor* SR_lock() const { return _SR_lock; } bool has_async_exception() const { return (_suspend_flags & _has_async_exception) != 0; } inline void set_suspend_flag(SuspendFlags f); --- 524,533 ----
*** 623,651 **** int vm_operation_ticket() { return ++_vm_operation_started_count; } int vm_operation_completed_count() { return _vm_operation_completed_count; } void increment_vm_operation_completed_count() { _vm_operation_completed_count++; } // For tracking the heavyweight monitor the thread is pending on. ! ObjectMonitor* current_pending_monitor() { ! return _current_pending_monitor; } void set_current_pending_monitor(ObjectMonitor* monitor) { _current_pending_monitor = monitor; } void set_current_pending_monitor_is_from_java(bool from_java) { _current_pending_monitor_is_from_java = from_java; } bool current_pending_monitor_is_from_java() { return _current_pending_monitor_is_from_java; } // For tracking the ObjectMonitor on which this thread called Object.wait() ! ObjectMonitor* current_waiting_monitor() { ! return _current_waiting_monitor; } void set_current_waiting_monitor(ObjectMonitor* monitor) { _current_waiting_monitor = monitor; } // For tracking the Jvmti raw monitor the thread is pending on. JvmtiRawMonitor* current_pending_raw_monitor() { return _current_pending_raw_monitor; --- 622,674 ---- int vm_operation_ticket() { return ++_vm_operation_started_count; } int vm_operation_completed_count() { return _vm_operation_completed_count; } void increment_vm_operation_completed_count() { _vm_operation_completed_count++; } // For tracking the heavyweight monitor the thread is pending on. ! ObjectMonitor* current_pending_monitor(ObjectMonitorHandle* omh_p) { ! if (omh_p->set_om_ptr_if_safe(_current_pending_monitor)) { ! return omh_p->om_ptr(); // Return the safe ObjectMonitor*. ! } ! return NULL; } void set_current_pending_monitor(ObjectMonitor* monitor) { + ObjectMonitor* saved_cur = NULL; + if (monitor != NULL) { + monitor->inc_ref_count(); // Protect the ObjectMonitor* we're about to cache. + } else { + saved_cur = _current_pending_monitor; + } _current_pending_monitor = monitor; + if (saved_cur != NULL) { + saved_cur->dec_ref_count(); // Cleared the cached ObjectMonitor*. + } } void set_current_pending_monitor_is_from_java(bool from_java) { _current_pending_monitor_is_from_java = from_java; } bool current_pending_monitor_is_from_java() { return _current_pending_monitor_is_from_java; } // For tracking the ObjectMonitor on which this thread called Object.wait() ! ObjectMonitor* current_waiting_monitor(ObjectMonitorHandle* omh_p) { ! if (omh_p->set_om_ptr_if_safe(_current_waiting_monitor)) { ! return omh_p->om_ptr(); // Return the safe ObjectMonitor*. ! } ! return NULL; } void set_current_waiting_monitor(ObjectMonitor* monitor) { + ObjectMonitor* saved_cur = NULL; + if (monitor != NULL) { + monitor->inc_ref_count(); // Protect the ObjectMonitor* we're about to cache. + } else { + saved_cur = _current_waiting_monitor; + } _current_waiting_monitor = monitor; + if (saved_cur != NULL) { + saved_cur->dec_ref_count(); // Cleared the cached ObjectMonitor*. + } } // For tracking the Jvmti raw monitor the thread is pending on. JvmtiRawMonitor* current_pending_raw_monitor() { return _current_pending_raw_monitor;
< prev index next >