< prev index next >
src/hotspot/share/runtime/thread.hpp
Print this page
rev 58110 : v2.09a with 8235795, 8235931 and 8236035 extracted; rebased to jdk-14+28; merge with 8236035.patch.cr1; merge with 8235795.patch.cr1; merge with 8236035.patch.cr2; merge with 8235795.patch.cr2; merge with 8235795.patch.cr3.
rev 58111 : See CR9-to-CR10-changes; merge with jdk-15+11.
@@ -622,29 +622,53 @@
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;
+ ObjectMonitor* current_pending_monitor(ObjectMonitorHandle* omh_p) {
+ if (omh_p->save_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() {
- return _current_waiting_monitor;
+ ObjectMonitor* current_waiting_monitor(ObjectMonitorHandle* omh_p) {
+ if (omh_p->save_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 >