RFR(s): 8213574: Deadlock in string table expansion when dumping lots of CDS classes

Jiangli Zhou jiangli.zhou at oracle.com
Mon Nov 12 22:28:38 UTC 2018


Hi Robbin,

I have a question for ConcurrentHashTable::do_safepoint_scan(). Is it 
possible for a bucket to have redirected item after do_safepoint_scan() 
scans the current table, but before (or during) scanning the _new_table? 
If that's possible, it might visit the same node twice (once in the 
current table, once in the new table)?

Thanks!

Jiangli


On 11/12/18 5:59 AM, Robbin Ehn wrote:
> Hi all, please review.
>
> The re-sizing operation is run by the ServiceThread (JavaThread). To 
> be safepoint polite it pauses the operation and do safepoint checks. 
> Operations on
> the hashtable that visit multiple bucket are mutual exclusive. This 
> means you
> can't iterate over the table during a safepoint if there is paused 
> resize.
>
> The hashtable uses a Mutex, which means if there were other threads 
> using it
> during the safepoint the VM thread sneaking would break it. Since 
> there are no such users it is safe to access it without locks in side 
> the safepoint. That is
> how rehash works today.
>
> Until we sorted this out better in 8213742,  I'm adding a safepoint 
> scanning
> operation that can handle a paused resize and which skips the lock.
>
> CR: https://bugs.openjdk.java.net/browse/JDK-8213574
> Webrev: http://cr.openjdk.java.net/~rehn/8213574/webrev/
>
> Passes t1-3 and 8213587 new test which triggered the issue.
>
> Thanks, Robbin



More information about the hotspot-runtime-dev mailing list