FW: RFR(S): 8210024: JFR calls virtual is_Java_thread from ~Thread()

David Holmes david.holmes at oracle.com
Wed Nov 14 09:05:13 UTC 2018


Hi Markus,

The changes to the runtime code in thread.cpp seems fine.

The Jfr changes I can't really speak to, but they seem reasonable. One 
question: is there any restriction/requirement/expectation that 
Jfr::on_thread_exit(t) is called from t? For JavaThreads it is always; 
for NonJavaThreads it may or may not.

Thanks,
David
-----

On 14/11/2018 6:50 pm, Markus Gronlund wrote:
> Greetings,
> 
> This RFR should have been sent to hotspot-runtime-dev as well as part of the original posting.
> 
> Thank you
> Markus
> 
> -----Original Message-----
> From: Markus Gronlund
> Sent: den 12 november 2018 13:59
> To: hotspot-jfr-dev at openjdk.java.net; Kim Barrett <kim.barrett at oracle.com>
> Subject: RFR(S): 8210024: JFR calls virtual is_Java_thread from ~Thread()
> 
> Greetings,
> 
> Please review the following changes to help make the JFR deregistration / buffer release steps a bit more robust as thread exits.
> 
> There is a need to release the JNIHandle for the EventWriter while the JavaThread is still on the threads list, since there is a sensitive interplay with the G1-prebarrier, and this change will help assist in the removal of shared PtrQueues.
> 
> The virtual is_Java_Thread() call can still be invoked for the NonJavaThreads in their destructor, but since the thread is still a NonJavaThread at this point, it should be possible to make is_Java_thread() pure virtual in Thread.
> I did not find any proper non-platform specific exit location for NonJavaThreads, so they release as part of the destructor.
> 
> Bug: https://bugs.openjdk.java.net/browse/JDK-8210024
> Webrev: http://cr.openjdk.java.net/~mgronlun/8210024/webrev01/
> Testing: JFR tests, tier1, tier2, tier3
> 
> Comments:
> The JfrThreadSampler changes should have been done when the JfrThreadSampler thread was turned into a NonJavaThread - removing the dead export code as part of this change.
> The Jfr::on_java_thread_dismantle() is an intermediary support that will be removed when we change overall thread registration from on_exit() to on_start(), which are planned upcoming changes.
> 
> Thanks to Kim for detailing several involved issues.
> 
> Thanks
> Markus
> 


More information about the hotspot-runtime-dev mailing list