On Tue, 12 Sep 2023 22:24:18 GMT, Chris Plummer <cjplum...@openjdk.org> wrote:
> This PR includes a couple of clarifications of the JDWP and JDI invoke method > support. The first is that deadlocks can occur due to a needed "resource" > being held. The spec previously just mentioned monitors being held, but this > is too specific. The second is to clarify that an invoke on a virtual thread > can be more prone to deadlocks than a platform thread may be. > > I did a doc build you can look at to view the changes. Links to the relevant > sections are below: > > https://cr.openjdk.org/~cjplummer/8301639/docs.00/specs/jdwp/jdwp-protocol.html#JDWP_ClassType_InvokeMethod > > https://cr.openjdk.org/~cjplummer/8301639/docs.00/specs/jdwp/jdwp-protocol.html#JDWP_ClassType_NewInstance > > https://cr.openjdk.org/~cjplummer/8301639/docs.00/specs/jdwp/jdwp-protocol.html#JDWP_InterfaceType_InvokeMethod > > https://cr.openjdk.org/~cjplummer/8301639/docs.00/specs/jdwp/jdwp-protocol.html#JDWP_ObjectReference_InvokeMethod > > https://cr.openjdk.org/~cjplummer/8301639/docs.00/api/jdk.jdi/com/sun/jdi/ClassType.html#invokeMethod(com.sun.jdi.ThreadReference,com.sun.jdi.Method,java.util.List,int) > > https://cr.openjdk.org/~cjplummer/8301639/docs.00/api/jdk.jdi/com/sun/jdi/ClassType.html#newInstance(com.sun.jdi.ThreadReference,com.sun.jdi.Method,java.util.List,int) > > https://cr.openjdk.org/~cjplummer/8301639/docs.00/api/jdk.jdi/com/sun/jdi/InterfaceType.html#invokeMethod(com.sun.jdi.ThreadReference,com.sun.jdi.Method,java.util.List,int) > > https://cr.openjdk.org/~cjplummer/8301639/docs.00/api/jdk.jdi/com/sun/jdi/ObjectReference.html#invokeMethod(com.sun.jdi.ThreadReference,com.sun.jdi.Method,java.util.List,int) src/java.se/share/data/jdwp/jdwp.spec line 1178: > 1176: "support the timer mechanism for virtual threads, and thus > methods such as " > 1177: "<a > href=../../api/java.base/java/lang/Thread.html#sleep(long)>Thread.sleep(long)</a> > " > 1178: "may deadlock." I think this is an implementation detail that you don't really want to document in these unrelated specifications. I'm also unclear why virtual threads are more of a problem here than regular threads, if you have suspended them all - a regular thread won't return from sleep until it is unsuspended. In fact the more I think about this, the less I see why virtual threads need special mention here at all. ------------- PR Review Comment: https://git.openjdk.org/jdk/pull/15695#discussion_r1323806059