On Wed, 7 Apr 2021 12:04:42 GMT, Robbin Ehn <r...@openjdk.org> wrote:

> Today the ThreadBlockInVM tbivm(current); is inside scope of 
> JavaThreadBlockedOnMonitorEnterState jtbmes(current, this);.
> So this can happen today also.
> 
> If you are context switch just before 
> current->set_current_pending_monitor(NULL);.
> Someone suspends you and look at those states.
> 

You mean the JVMTI agent suspends the current thread and then observes that the
thread state first has the attribute 
JVMTI_THREAD_STATE_BLOCKED_ON_MONITOR_ENTER and
in a later call it does not have it anymore (~ThreadBlockInVM doesn't check for
suspend)? Yes that's problematic too.

With the new code we could remain suspended with
JVMTI_THREAD_STATE_BLOCKED_ON_MONITOR_ENTER. I think the OM would not be
reported as owned monitor but another thread could not lock it.

> If you agree that the issue is preexisting I prefer handling that outside 
> scope of this.

I'm ok with that.

A simple solution could then be making use of ThreadBlockInVM. When returning
from EnterI in L413 we would set a rollback function in the HandshakeState which
can be called in HandshakeState::suspend_in_handshake() to exit the OM.

-------------

PR: https://git.openjdk.java.net/jdk/pull/3191

Reply via email to