On Wed, 26 Mar 2025 20:36:22 GMT, Chris Plummer <cjplum...@openjdk.org> wrote:

>> test/jdk/com/sun/jdi/EarlyThreadGroupChildrenTest.java line 83:
>> 
>>> 81:     public void classPrepared(ClassPrepareEvent event) {
>>> 82:         try {
>>> 83:             ++classPreparedCount;
>> 
>> It's a long time since I looked at at test based on TestScaffold. Would I be 
>> correct to say that it creates an event  handler thread to remove events 
>> from the event queue and dispatch them to the registered listeners? Only 
>> asking as it's not immediately clear if the increment of the event count is 
>> correct. I think TestScaffold uses one thread but would need to dig into the 
>> test infra to be sure.
>
> Yes, one EventHandler thread dispatching to all listeners. More details below:
> 
> There is an interface called TargetListener which declares all the event 
> callbacks. TargetAdapter implements TargetListener and provides and empty 
> implementation for each callback. TestScaffold extends TargetAdapter, and 
> each test extends TestScaffold. So every test has default empty 
> implementations of all the callbacks, and can override some (there are a 
> couple of overrides in this tests).
> 
> A TargetListener instance gets events by adding itself as a listener using 
> TestScaffold.addListener(). You can see that this test is doing that early on 
> so it gets events.
> 
> In addition, some of the TestScaffold APIs will create an instance of a 
> TargetAdapter with one or more event callback overrides, and register that 
> listener. For example, see waitForRequestedEvent(). So it is possible to have 
> 2 or more listeners registered, although as I just pointed out in 
> [JDK-8352759](https://bugs.openjdk.org/browse/JDK-8352759), that can be 
> problematic at times.
> 
> TestScaffold always has an EventHandler thread active (and only one). It sits 
> in a loop calling EventQueue.remove(). For any each EventSet received it will 
> iterate over each Event in the EventSet, and for each registered listener, it 
> will call the listener's event callback for that Event.

BTW, classPreparedCount is somewhat unneeded legacy code. Previously I had 
limited it to 50 events to avoid the VMDisconnected exception, but I got rid of 
the count check and instead now catch the exception.

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

PR Review Comment: https://git.openjdk.org/jdk/pull/24236#discussion_r2014964080

Reply via email to