RFR: 8295816: jdwp jck tests failing with "FATAL ERROR in native method: JDWP SetTag, jvmtiError=JVMTI_ERROR_WRONG_PHASE(112)"

Chris Plummer cjplummer at openjdk.org
Tue Oct 25 02:43:43 UTC 2022


On Mon, 24 Oct 2022 05:29:26 GMT, Chris Plummer <cjplummer at openjdk.org> wrote:

> Various debugger tests (mainly JCK vm/jdwp tests) are failing with:
> 
> `FATAL ERROR in native method: JDWP SetTag, jvmtiError=JVMTI_ERROR_WRONG_PHASE(112) `
> 
> Sometimes instead of `SetTag` the message says `GetTag` or `signature`.  This is a new issue caused by [JDK-8295375](https://bugs.openjdk.org/browse/JDK-8295375), which changed the debug agent CLASS_PREPARE event handling that is used for class tracking. It moved it from the main debug agent JVMTIEnv to a JVMTIEnv that already existed for class tracking purposes to deal with OBJECT_FREE events. Because of this, synchronizing around VMDEATH was lost, so it's possible for the CLASS_PREPARE event to be received just before VMDEATH, but then VMDEATH completes before the CLASS_PREPARE callback can complete. This results in WRONG_PHASE errors when making some JVMTI calls.
> 
> The easiest fix is for the code in `classTrack_addPreparedClass()` to check for JVMTI_ERROR_WRONG_PHASE, and if it gets it then just return. It should also assert that `gData->vmDead` is true when this happens. This is needed in 3 places where JVMTI is called.
> 
> The purist fix would be to somehow synchronize with VMDEATH, either with the same locking done by the main event handling code (for example, use BEGIN_CALLBACK and END_CALLBACK), or by having the class tracking JVMTIEnv also enable VMDEATH events. The VMDEATH callback block would disable the CLASS_PREPARE events, and also block until any currently executing CLASS_PREPARE callback has exited. I think this is overkill, and also adds locking overhead to the CLASS_PREPARE callback, so I'm going with the simpler solution of allowing WRONG_PHASE.

Thanks for the review Serguei!

Can I get one more review please. The failures are getting rather noisy, so I'd like to get this fix pushed. Thanks.

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

PR: https://git.openjdk.org/jdk/pull/10831


More information about the serviceability-dev mailing list