On Mon, 27 Jun 2022 17:49:25 GMT, Zhengyu Gu <z...@openjdk.org> wrote:

>>> This patch is intended to not post ObjectFree events on VMThread, so I am 
>>> going to move this PR back to draft state and take another look.
>> 
>> I'm not so sure it matters to the debug agent. I thought the main change 
>> here was to not force posting of ObjectFree events to be deferred to the 
>> VMThread, and to change the debug agent to send the CLASS_UNLOAD events 
>> right away rather than accumulating them and waiting for a GCFinishEvent. Is 
>> there any issue if the posting of ObjectFree and sending of CLASS_UNLOAD is 
>> done on the VMThread?
>
> Hmm... I thought that is the whole purpose for delaying processing class 
> unload events, because it can not be done on `VMThread`? Otherwise, we don't 
> need all this complexity, just have `cbTrackingObjectFree()` calls 
> `synthesizeUnloadEvent()` directly.

There were two delays. One was the debug agent waiting until the GCFinishEvent 
before sending out all the queued up CLASS_UNLOAD events. The other was JVMTI 
deferring the posting the ObjectFree events that arrive on a JavaThread, and 
instead using the VMThread:

1200 // PostObjectFree can't be called by JavaThread, so call it from the VM 
thread.
1201 void JvmtiTagMap::post_dead_objects_on_vm_thread() {
1202   VM_JvmtiPostObjectFree op(this);
1203   VMThread::execute(&op);

I think this was because the VM state was not consistent, and I believed you 
have resolved this so it should be ok to post from the JavaThread (which I 
think is actually the ServiceThread in this case, but I'm not certain).

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

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

Reply via email to