As noted in [JDK-8352088](https://bugs.openjdk.org/browse/JDK-8352088), JVMTI 
`GetThreadGroupChildren` does an upcall to java. This results in  
a`ClassPrepare` event the first time it does this, and these events can cause 
problems (deadlocks) for the debugger or debug agent. The  
[JDK-8352088](https://bugs.openjdk.org/browse/JDK-8352088) was fixed to get rid 
of class loading during Java upcall from `GetThreadGroupChildren`. However, 
some other events can be generated as well. It is more safe to disable all 
JVMTI events during debugger-related upcalls originated by JVMTI.
The `ClassPrepare` events are important for the debug agent. So, an assert was 
added into `ClassPrepare` event generation to make sure there are no attempts 
to post this event during upcalls.
Some specific implementation details can be added to the first PR comment.

Testing:
 - Verified with the test `jdk/com/sun/jdi/EarlyThreadGroupChildrenTest.java` 
that was added with the fix of 
[JDK-8352088](https://bugs.openjdk.org/browse/JDK-8352088):
   - the assert described above is fired if the fix of JDK-8352088 is removed
   - the test is passed without if the fix of JDK-8352088 is removed and the 
assert is removed
 - Ran mach5 tiers 1-6

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

Commit messages:
 - 8352773: JVMTI should disable events during java upcalls

Changes: https://git.openjdk.org/jdk/pull/24539/files
  Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=24539&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8352773
  Stats: 32 lines in 6 files changed: 30 ins; 0 del; 2 mod
  Patch: https://git.openjdk.org/jdk/pull/24539.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/24539/head:pull/24539

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

Reply via email to