And eventController.release() causes the following statement to be
executed on the eventcontroller thread after the 'vm' is disposed:
JDWP.VirtualMachine.ReleaseEvents.process(vm);
Which does not seem to be right. Someone from the Serviceability
group can confirm the correctness of this change.

I think this is okay, because with the new change shouldListen() is
called right after the thread returns from wait(). And this will
lead to the thread immediately exiting.
JDWP.VirtualMachine.ReleaseEvents.process(vm);
should not be called in this case.

I just re-read the webrev and I agree with Christoph that this new check:
L358: if (!shouldListen) {
L359: return;
L360: }
will keep the EventController.run() method from trying to
use the 'vm' that has been disposed.
Dan

Line 330: Instance variable 'VirtualMachineImpl vm' is removed
from the EventController class. It is being used further down in
its
run() method. So I think it cannot be removed.

The vm object is used from the outer class TargetVM, as
EventController is an inner class of it.
So in my view it's all correct but still somebody of the
serviceability group might know better...