RFR: 8268902: Testing for threadObj != NULL is unnecessary in handshake
Coleen Phillimore
coleen.phillimore at oracle.com
Wed Jun 23 00:38:03 UTC 2021
On 6/22/21 6:59 PM, David Holmes wrote:
> On 23/06/2021 12:39 am, Coleen Phillimore wrote:
>> On Wed, 16 Jun 2021 16:03:04 GMT, Coleen Phillimore
>> <coleenp at openjdk.org> wrote:
>>
>>> The handshake code tests if the JavaThread->is_exiting or that the
>>> threadObj() is null. Ever since JDK-8244997, once the JavaThread is
>>> running, the _threadObj won't be null until JavaThread is destroyed.
>>> So testing is_exiting is all you need to do.
>>> In gtest, the test JavaThread doesn't create a _threadObj
>>> JDK-8215948 so removing this unnecessary test allows writing gtests
>>> for handshakes.
>>>
>>> Tested with tier1-6.
>>
>> I am looking at all the threads we create in the vm like the
>> ServiceThread (look for Threads::add()), but not
>> attach_current_thread in jni. You're right, we have to make this
>> thread safepoint here.
>> I wonder why some threads we create call ThreadGroup.add and some
>> don't. There's lots of duplicate code that's slightly different for
>> each.
>
> I'm not sure on the "why". Some internal threads (e.g. AttachListener)
> don't call the j.l.Thread constructor and so have to directly call the
> ThreadGroup.add method. I suspect because these are not true Java
> threads that there is some Java-side logic that Thread construction
> performs which is not suitable for these internal threads.
Seems that ServiceTherad, MonitorDeflationThread and JFRRecorderThread
do not call ThreadGroup.add, but NotificationThread, SignalThread (for
-xrs), AttachListener, JNI attached threads, don't know JvmtiAgent
threads, and JVM_StartThread (calls JavaThread::prepare).
There's lots of variations with similar code to create threads.
>
>> Unfortunately now I need a fix for JDK-8215948, hopefully without
>> another duplicate copy of this thread creation code so I can write my
>> handshake test.
>
> Okay guess I'd better look at it again then. :) I can determine which
> variant of the j.l.Thread creation logic is suitable and then factor
> that out into a support method like
> Thread::create_internal_java_thread().
Please! Refactoring would be very nice!
Thanks,
Coleen
>
> David
> -----
>
>> -------------
>>
>> PR: https://git.openjdk.java.net/jdk/pull/4512
>>
More information about the hotspot-runtime-dev
mailing list