Request: Remove System.out check from Class.checkInitted()
David Holmes
david.holmes at oracle.com
Thu Dec 19 12:06:06 UTC 2013
On 19/12/2013 9:59 PM, Alan Bateman wrote:
> On 19/12/2013 10:13, David Holmes wrote:
>>
>> Not necessarily. The question is, are there any code paths that lead
>> to checkInitted being called after setOut0(newPrintStream(fdOut,
>> props.getProperty("sun.stdout.encoding"))) but before the call to
>> sun.misc.VM.booted(). If so these would fail under the proposed change.
>>
>> The initialization sequence is fragile and intimately tied to the
>> Hotspot VM - ie the VM initialization process initiates the core class
>> initialization. In a "normal" initialization System is initialized
>> before Class and Class must be initialized before checkInitted can be
>> called, so this doesn't trigger initialization of System.
>>
>> I also don't see how System.out being null can be valid
>> post-initialization state given the call to
>> setOut0(newPrintStream(fdOut, props.getProperty("sun.stdout.encoding")))
> It would be unusual to change it later with System.setOut but it is
> possible.
>
> In any case, using VM.isBooted is the normal way to check if system
> initialization has completed.
Yes but it may not be sufficient in this case. As I said we have to be
sure checkInitted can not be called by anything between the setting of
out to non-null and the call to booted().
David
> -Alan.
More information about the core-libs-dev
mailing list