RFC: 8229160: Reimplement JvmtiRawMonitor to use PlatformMonitor

David Holmes david.holmes at oracle.com
Wed Aug 28 23:30:40 UTC 2019


Hi Yasumasa,

On 29/08/2019 12:14 am, Yasumasa Suenaga wrote:
> Hi,
> 
> I guess this issue was occurred on ObjectFree JVMTI event.
> It is registered in a04t001.cpp [1]. I think it might be called on GC 
> worker because it relates to JvmtiExport::weak_oops_do().
> 
> In current code, JvmtiRawMonitor::_owner is handled with atomic operation.
> However at JvmtiRawMonitor::quick_enter() in new webrev, it just 
> referent normally.
> Should it be handled atomically?

No. In the new code "_owner" is only an informational field used by the 
current thread to detect its own recursive lock usage. Actual ownership 
is determined by the successful lock or tryLock of the underlying 
PlatformMonitor.

However I had been thinking about memory ordering and there are missing 
membars. We have to do:

lock(); _owner=THREAD;
_owner=NULL; unlock();

in the order specified so I need to insert storestore barriers.

> 
> At least, I think this assert might be failed in current code because 
> raw monitor might be handled on GC worker. So "FIXME" comment Martin 
> found is valid...

Yes. Though I'd still like to understand why we don't see the same 
assertion failure in existing code.

But moving on ... what are your thoughts on the interrupt semantics?

Thanks,
David


> 
> Thanks,
> 
> Yasumasa
> 
> 
> [1] 
> hg.openjdk.java.net/jdk/jdk/file/4f38fcd65577/test/hotspot/jtreg/vmTestbase/nsk/jvmti/scenarios/allocation/AP04/ap04t001/ap04t001.cpp#l219 
> 
> 
> 
> On 2019/08/28 21:57, Doerr, Martin wrote:
>> Hi David,
>>
>>> Now why would a GCTaskThread being executing code that accesses
>>> JvmtiRawMonitors? Are we in some kind of event callback?
>> I believe so. The test registers the following callbacks:
>>      callbacks.GarbageCollectionStart = &GarbageCollectionStart;
>>      callbacks.GarbageCollectionFinish = &GarbageCollectionFinish;
>> And these callback functions use jvmti->RawMonitorEnter.
>>
>> Note that the spec for "Raw Monitor Enter" allows this:
>> "This function may be called from the callbacks to the Heap iteration 
>> functions, or from the event handlers for the GarbageCollectionStart, 
>> GarbageCollectionFinish, and ObjectFree events."
>>
>>> Is there any more stack? What is that dll?
>> The dll belongs to the test. I guess it was built without debug info 
>> so there's no native stack trace available.
>>
>>> Can you tell me what test this was and how to reproduce?
>> make run-test 
>> TEST="vmTestbase/nsk/jvmti/scenarios/allocation/AP04/ap04t001"
>> I haven't tried if it can be reproduced well. May be sporadic.
>>
>> At least, I can confirm that the following comment is true ��
>> // FIXME: this is broken - raw_enter only accepts the VMThread
>>
>> Best regards,
>> Martin
>>


More information about the serviceability-dev mailing list