RFR(s): 8209139: globalCounter bootstrap issue

Robbin Ehn robbin.ehn at oracle.com
Wed Nov 7 10:01:52 UTC 2018


Hi David,

On 2018-11-07 10:40, David Holmes wrote:
> Hi Robbin,
> 
> Can't you just use an _initialized flag ?? 

I can, but I need to changes many places since the ThreadsList is not expected
to be null. And I do not see how checking that flag instead checking if the list
is the bootstrap would be better.

Or statically initialize
> _java_thread_list to a zero-length list? 

It's statically initialized to _bootstrap_list. Since I'm going to need to check
for a bootstrap list in a non-SMR-thread I can't follow the pointer because we
can crash. So I need to know which address to check for, this is the
_bootstrap_list. And since it's static I can't free it.

> This seems overly elaborate.

If we get a SMR bug doing it different could give us wired crashes instead of
clean assert failures. That is why you think this is 'overly elaborate' I guess.

> 
> I'm not even concerned about the existing "hack" - checking for 
> "Threads::number_of_threads() == 0" has always been a simple way to see if you 
> are very early in the init sequence.

Well it only solves the problem for the GlobalCounter.
And in theory we could have added non-JavaThreads to the RCU thread-set they
should be checked.

Thanks, Robbin

> 
> Thanks,
> David
> 
> On 7/11/2018 6:56 PM, Robbin Ehn wrote:
>> Hi all, please review.
>>
>> When changing the hashtable for SymbolTable we did a hack to handle the case
>> when symbols gets inserted before the VM is proper initialized, by doing nothing
>> in the GlobalCounter if there is no threads. The problem is that the thread
>> creating the VM is not yet added to the VM (non-SMR-thread) and thus
>> ThreadsListHandle do not yet work for that thread. Trying to move the addition
>> of the creating thread earlier in the bootstrap is troublesome.
>>
>> This removes that hack and do a more generic solution for ThreadsList instead.
>> To make it safe to verify that we are talking about the bootstrap ThreadsList 
>> from a non-SMR-thread we cannot follow that pointer. Using null was intrusive 
>> to the code I therefore choose to do a static bootstrap ThreadsList.
>>
>> CR: https://bugs.openjdk.java.net/browse/JDK-8209139
>> Webrev: http://cr.openjdk.java.net/~rehn/8209139/webrev/
>>
>> Tested with use of ThreadsListHandle and GlobalCounter in the problematic init 
>> method, passed t1-2 with use of ThreadsListHandle in that init method.
>>
>> Thanks, Robbin


More information about the hotspot-runtime-dev mailing list