RFR: 8162563: Fix double checked locking in System.console()

David Holmes david.holmes at oracle.com
Wed Jul 27 06:13:31 UTC 2016


On 27/07/2016 3:45 PM, Martin Buchholz wrote:
> Hi David,
>
> I didn't even look at Console.java!  I just fixed the double-checked
> locking in System.java.
>
> Looking now at Console.cons, that is NOT safely statically initialized:
>
>         SharedSecrets.setJavaIOAccess(new JavaIOAccess() {
>             public Console console() {
>                 if (istty()) {
>                     if (cons == null)
>                         cons = new Console();
>                     return cons;
>                 }
>                 return null;
>             }
>
> (but it's currently safe because only System.java accesses it)

The above code is in a static initialization block.

Cheers,
David


> Now perhaps Console.cons is deserving of its own proper init-once code.
> Perhaps we don't need a static Console field in both classes Console and
> System?
>
>
> On Tue, Jul 26, 2016 at 7:31 PM, David Holmes <david.holmes at oracle.com
> <mailto:david.holmes at oracle.com>> wrote:
>
>     On 27/07/2016 6:35 AM, Martin Buchholz wrote:
>
>         Hi Xueming,
>
>         I'd like you to do a wee code review,
>
>         http://cr.openjdk.java.net/~martin/webrevs/openjdk9/Console-double-checked-locking/
>
>
>     Humour me - where is the bug? We're simply retrieving the existing
>     Console singleton that is safely published through static
>     initialization. All this seems to do is improve the performance if a
>     race occurs.
>
>     AFAICS the use of locking here isn't necessary at all.
>
>     Cheers,
>     David
>
>


More information about the core-libs-dev mailing list