@@ -106,10 +106,16 @@ monitorWaitImpl(J9VMThread *vmThread, j9object_t object, I_64 millis, I_32 nanos
106106#endif
107107 J9VMTHREAD_SET_BLOCKINGENTEROBJECT (vmThread, vmThread, object);
108108 object = NULL ;
109+ /* Set j.l.Thread status to WAITING. */
110+ U_64 oldState = J9_ARE_ANY_BITS_SET (thrstate, J9_PUBLIC_FLAGS_THREAD_TIMED)
111+ ? VM_VMHelpers::setThreadState (vmThread, J9VMTHREAD_STATE_WAITING_TIMED)
112+ : VM_VMHelpers::setThreadState (vmThread, J9VMTHREAD_STATE_WAITING);
109113 internalReleaseVMAccessSetStatus (vmThread, thrstate);
110114 rc = timeCompensationHelper (vmThread,
111115 interruptable ? HELPER_TYPE_MONITOR_WAIT_INTERRUPTABLE : HELPER_TYPE_MONITOR_WAIT_TIMED, monitor, millis, nanos);
112116 internalAcquireVMAccessClearStatus (vmThread, thrstate);
117+ /* Set j.l.Thread status to oldState. */
118+ VM_VMHelpers::setThreadState (vmThread, oldState);
113119 J9VMTHREAD_SET_BLOCKINGENTEROBJECT (vmThread, vmThread, NULL );
114120 omrthread_monitor_unpin (monitor, vmThread->osThread );
115121 TRIGGER_J9HOOK_VM_MONITOR_WAITED (javaVM->hookInterface , vmThread, monitor, millis, nanos, rc, startTicks, (UDATA) monitor, VM_VMHelpers::currentClass (monitorClass));
@@ -179,9 +185,13 @@ threadSleepImpl(J9VMThread *vmThread, I_64 millis, I_32 nanos)
179185#endif
180186 if (0 == rc) {
181187 TRIGGER_J9HOOK_VM_SLEEP (javaVM->hookInterface , vmThread, millis, nanos);
188+ /* Set j.l.Thread status to SLEEPING. */
189+ U_64 oldState = VM_VMHelpers::setThreadState (vmThread, J9VMTHREAD_STATE_SLEEPING);
182190 internalReleaseVMAccessSetStatus (vmThread, J9_PUBLIC_FLAGS_THREAD_SLEEPING);
183191 rc = timeCompensationHelper (vmThread, HELPER_TYPE_THREAD_SLEEP, NULL , millis, nanos);
184192 internalAcquireVMAccessClearStatus (vmThread, J9_PUBLIC_FLAGS_THREAD_SLEEPING);
193+ /* Set j.l.Thread status to oldState. */
194+ VM_VMHelpers::setThreadState (vmThread, oldState);
185195 TRIGGER_J9HOOK_VM_SLEPT (javaVM->hookInterface , vmThread, millis, nanos, startTicks);
186196 }
187197
0 commit comments