RFR (S): 8211909: JDWP Transport Listener: dt_socket thread crash

David Holmes david.holmes at oracle.com
Thu Oct 18 01:34:32 UTC 2018


Thanks Serguei!

David

On 18/10/2018 9:00 AM, serguei.spitsyn at oracle.com wrote:
> Hi David,
> 
> Sorry for being late but just wanted to tell you that it looks good to me.
> Thank you for catching and taking care about it!
> 
> Thanks,
> Serguei
> 
> 
> On 10/14/18 22:12, David Holmes wrote:
>> Bug: https://bugs.openjdk.java.net/browse/JDK-8211909
>> webrev: http://cr.openjdk.java.net/~dholmes/8211909/webrev/
>>
>> The crash occurs when trying to access a thread that was returned as 
>> part of JVM TI GetThreadGroupChildren. The problem is that the JVM TI 
>> code tries to use the Threads_lock to ensure atomic access to the 
>> ThreadGroup's threads and child groups:
>>
>>     { // Cannot allow thread or group counts to change.
>>       MutexLocker mu(Threads_lock);
>>
>> but the Threads_lock does not control concurrency in the Java code 
>> that can cause threads to be added and removed, so we do not get a 
>> stable snapshot of the thread array and its length, and contents. To 
>> get a stable snapshot we have to use the same synchronization 
>> mechanism as used by the Java code: lock the monitor of the 
>> ThreadGroup instance.
>>
>> Two other pointless acquisitions of the Threads_lock, in GetThreadInfo 
>> and GetThreadGroupInfo, were also removed. These functions could 
>> report an inconsistent snapshot of the Thread or ThreadGroup state, if 
>> the mutable state is mutated concurrently. Again we could acquire the 
>> object's monitor to prevent this but it is unclear that there is any 
>> real benefit in doing so - after all the thread/group information 
>> could change immediately after it has been read anyway. So here I just 
>> delete the Threads_lock usage.
>>
>> Testing: mach5 tier 1-3
>>          JVM TI tests (serviceability/jvmti vmTestbase/nsk/jvmti/)
>>
>> A regression test may be possible if we call GetThreadGroupChildren in 
>> a loop, whilst threads add and remove themselves from the group 
>> concurrently. But it is awkward to write.
>>
>> Thanks,
>> David
>>
>> Thanks,
>> David
> 


More information about the serviceability-dev mailing list