On Mon, 17 May 2021 07:02:30 GMT, Robbin Ehn <r...@openjdk.org> wrote:

>> src/hotspot/share/prims/jvmtiRawMonitor.hpp line 48:
>> 
>>> 46: // The rules are:
>>> 47: // - We must never safepoint poll if raw monitor is owned.
>>> 48: // - We may safepoint poll before it is owned and after it has been 
>>> released.
>> 
>> I'm not sure exactly what this is trying to say because user code can 
>> acquire a RawMonitor, then call into Java while holding the RawMonitor. That 
>> external use of RawMonitors should never cause any deadlock with the 
>> VMThread of course.
>
> This comment applies to the RawMonitor code, where the typical use-case that 
> otherwise can deadlock is:
> JavaThread:
> -lock RM
> LOOP { 
>  -wait RM
>  -do stufff with data from VM thread
> }
> -unlock RM
> 
> The user do not call into the VM/Java.
> 
> VM Thread:
> -safepoint
>   -lock RM
>   -notify RM
>   -unlock RM
> 
> If we in this case safepoint between the lock and the unlock in wait() we 
> deadlock with VM thread.
> 
> If the user would call into the VM/Java while holding the RM he obviously 
> could deadlock with VM thread.
> But he would also deadlock if he used a pthread mutex because that code would 
> be buggy.

Okay I understand what you are referring to now - thanks. It is a bit 
concerning that Raw Monitor wait is specified to be callback safe as that means 
we can legitimately block the VMThread indefinitely!

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

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

Reply via email to