< prev index next >

src/hotspot/share/prims/jvmtiEnvBase.cpp

Print this page
rev 59077 : 8153224.v2.09b.patch combined with 8153224.v2.10.patch; merge with jdk-15+21.
rev 59078 : eosterlund v2.10 CR: reorganize deflate_monitor_using_JT() to use "early exit" style; dcubed - clarify/fix/rearrange a few comments in deflate_monitor_using_JT(); eosterlund v2.10 CR: simplify install_displaced_markword_in_object() and save_om_ptr(); save_om_ptr()'s call to install_displaced_markword_in_object() can race with the deflater thread's clearing of the object field so handle that; fold 8153224.OMHandle_experiment into 8153224.v2.11.patch; merge with jdk-15+21.

*** 651,660 **** --- 651,663 ---- JavaThread *current_jt = JavaThread::current(); assert(current_jt == java_thread || current_jt == java_thread->active_handshaker(), "call by myself or at direct handshake"); oop obj = NULL; + // The ObjectMonitor* can't be async deflated since we are either + // at a safepoint or the calling thread is operating on itself so + // it cannot leave the underlying wait()/enter() call. ObjectMonitor *mon = java_thread->current_waiting_monitor(); if (mon == NULL) { // thread is not doing an Object.wait() call mon = java_thread->current_pending_monitor(); if (mon != NULL) {
*** 728,746 **** } HandleMark hm; oop wait_obj = NULL; { ! // save object of current wait() call (if any) for later comparison ObjectMonitor *mon = java_thread->current_waiting_monitor(); if (mon != NULL) { wait_obj = (oop)mon->object(); } } oop pending_obj = NULL; { ! // save object of current enter() call (if any) for later comparison ObjectMonitor *mon = java_thread->current_pending_monitor(); if (mon != NULL) { pending_obj = (oop)mon->object(); } } --- 731,755 ---- } HandleMark hm; oop wait_obj = NULL; { ! // The ObjectMonitor* can't be async deflated since we are either ! // at a safepoint or the calling thread is operating on itself so ! // it cannot leave the underlying wait() call. ! // Save object of current wait() call (if any) for later comparison. ObjectMonitor *mon = java_thread->current_waiting_monitor(); if (mon != NULL) { wait_obj = (oop)mon->object(); } } oop pending_obj = NULL; { ! // The ObjectMonitor* can't be async deflated since we are either ! // at a safepoint or the calling thread is operating on itself so ! // it cannot leave the underlying enter() call. ! // Save object of current enter() call (if any) for later comparison. ObjectMonitor *mon = java_thread->current_pending_monitor(); if (mon != NULL) { pending_obj = (oop)mon->object(); } }
< prev index next >