From a3a7554d73017de28e8312386fb957a6064de852 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A1=D0=B5=D1=80=D0=B3=D0=B5=D0=B9=20=D0=A6=D1=8B=D0=BF?= =?UTF-8?q?=D0=B0=D0=BD=D0=BE=D0=B2?= Date: Mon, 20 Mar 2023 09:32:50 +0200 Subject: [PATCH 1/3] UnixPath.stringValue shouldn't be volatile --- src/java.base/unix/classes/sun/nio/fs/UnixPath.java | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/java.base/unix/classes/sun/nio/fs/UnixPath.java b/src/java.base/unix/classes/sun/nio/fs/UnixPath.java index 1fe4a13854b62..4dc53e342cc4b 100644 --- a/src/java.base/unix/classes/sun/nio/fs/UnixPath.java +++ b/src/java.base/unix/classes/sun/nio/fs/UnixPath.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 2023, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -42,8 +42,8 @@ import jdk.internal.access.JavaLangAccess; import jdk.internal.access.SharedSecrets; -import static sun.nio.fs.UnixConstants.*; -import static sun.nio.fs.UnixNativeDispatcher.*; +import static sun.nio.fs.UnixNativeDispatcher.open; +import static sun.nio.fs.UnixNativeDispatcher.realpath; /** * Linux/Mac implementation of java.nio.file.Path @@ -57,8 +57,8 @@ class UnixPath implements Path { // internal representation private final byte[] path; - // String representation (created lazily) - private volatile String stringValue; + // String representation (created lazily, no need to be volatile) + private String stringValue; // cached hashcode (created lazily, no need to be volatile) private int hash; @@ -761,8 +761,9 @@ public int hashCode() { @Override public String toString() { // OK if two or more threads create a String + String stringValue = this.stringValue; if (stringValue == null) { - stringValue = fs.normalizeJavaPath(Util.toString(path)); // platform encoding + this.stringValue = stringValue = fs.normalizeJavaPath(Util.toString(path)); // platform encoding } return stringValue; } From 2cc5ee57d012d731bf65556e6e568c67d321bced Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A1=D0=B5=D1=80=D0=B3=D0=B5=D0=B9=20=D0=A6=D1=8B=D0=BF?= =?UTF-8?q?=D0=B0=D0=BD=D0=BE=D0=B2?= Date: Mon, 20 Mar 2023 16:38:42 +0200 Subject: [PATCH 2/3] Fix build --- src/java.base/unix/classes/sun/nio/fs/UnixPath.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/java.base/unix/classes/sun/nio/fs/UnixPath.java b/src/java.base/unix/classes/sun/nio/fs/UnixPath.java index 4dc53e342cc4b..e5ceec47138e0 100644 --- a/src/java.base/unix/classes/sun/nio/fs/UnixPath.java +++ b/src/java.base/unix/classes/sun/nio/fs/UnixPath.java @@ -42,6 +42,8 @@ import jdk.internal.access.JavaLangAccess; import jdk.internal.access.SharedSecrets; +import static sun.nio.fs.UnixConstants.O_NOFOLLOW; +import static sun.nio.fs.UnixConstants.O_RDONLY; import static sun.nio.fs.UnixNativeDispatcher.open; import static sun.nio.fs.UnixNativeDispatcher.realpath; From 88cd6cfced32bebd54210f52351e606a5bd72d1a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A1=D0=B5=D1=80=D0=B3=D0=B5=D0=B9=20=D0=A6=D1=8B=D0=BF?= =?UTF-8?q?=D0=B0=D0=BD=D0=BE=D0=B2?= Date: Tue, 21 Mar 2023 11:21:47 +0200 Subject: [PATCH 3/3] Revert --- src/java.base/unix/classes/sun/nio/fs/UnixPath.java | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/java.base/unix/classes/sun/nio/fs/UnixPath.java b/src/java.base/unix/classes/sun/nio/fs/UnixPath.java index e5ceec47138e0..a614f5025f283 100644 --- a/src/java.base/unix/classes/sun/nio/fs/UnixPath.java +++ b/src/java.base/unix/classes/sun/nio/fs/UnixPath.java @@ -42,10 +42,8 @@ import jdk.internal.access.JavaLangAccess; import jdk.internal.access.SharedSecrets; -import static sun.nio.fs.UnixConstants.O_NOFOLLOW; -import static sun.nio.fs.UnixConstants.O_RDONLY; -import static sun.nio.fs.UnixNativeDispatcher.open; -import static sun.nio.fs.UnixNativeDispatcher.realpath; +import static sun.nio.fs.UnixConstants.*; +import static sun.nio.fs.UnixNativeDispatcher.*; /** * Linux/Mac implementation of java.nio.file.Path