RFR: JDK-8314272: Improve java.util.prefs.BackingStoreException: Couldn't get file lock. [v2]
Matthias Baesken
mbaesken at openjdk.org
Fri Sep 1 13:14:43 UTC 2023
On Fri, 1 Sep 2023 12:36:28 GMT, Matthias Baesken <mbaesken at openjdk.org> wrote:
>> We run into some BackingStoreException: Couldn't get file lock. e.g. here :
>>
>> [JShell] Exception in thread "main" java.lang.IllegalStateException: java.util.prefs.BackingStoreException: Couldn't get file lock.
>> [JShell] at jdk.jshell/jdk.internal.jshell.tool.JShellToolBuilder$PreferencesStorage.flush(JShellToolBuilder.java:313)
>> [JShell] at jdk.jshell/jdk.internal.jshell.tool.JShellTool$ReplayableHistory.storeHistory(JShellTool.java:692)
>> [JShell] at jdk.jshell/jdk.internal.jshell.tool.JShellTool.start(JShellTool.java:1008)
>> [JShell] at jdk.jshell/jdk.internal.jshell.tool.JShellToolBuilder.start(JShellToolBuilder.java:261)
>> [JShell] at jdk.jshell/jdk.internal.jshell.tool.JShellToolProvider.main(JShellToolProvider.java:120)
>> [JShell] Caused by: java.util.prefs.BackingStoreException: Couldn't get file lock.
>> [JShell] at java.prefs/java.util.prefs.FileSystemPreferences.sync(FileSystemPreferences.java:769)
>> [JShell] at java.prefs/java.util.prefs.FileSystemPreferences.flush(FileSystemPreferences.java:864)
>> [JShell] at jdk.jshell/jdk.internal.jshell.tool.JShellToolBuilder$PreferencesStorage.flush(JShellToolBuilder.java:311)
>> [JShell] ... 4 more
>>
>> The BackingStoreException should be enhanced e.g. by adding the errno/errorCode that is already available in the coding
>
> Matthias Baesken has updated the pull request incrementally with one additional commit since the last revision:
>
> add for some errnos also the string
Hi Alan ,
Your assumption 'I assume the use of System.getProperty is problematic when running with a SM.' is most likely correct.
java.desktop/share/classes/sun/awt/FontConfiguration.java-133- protected void setOsNameAndVersion() {
java.desktop/share/classes/sun/awt/FontConfiguration.java:134: osName = System.getProperty("os.name");
java.desktop/share/classes/sun/awt/FontConfiguration.java-135- osVersion = System.getProperty("os.version");
java.desktop/share/classes/sun/awt/FontConfiguration.java-136- }
java.desktop/share/classes/sun/awt/FontConfiguration.java-137-
--
java.management/share/classes/javax/management/loading/MLet.java-1054- // the architecture-specific path name. e.g. if user
java.management/share/classes/javax/management/loading/MLet.java-1055- // requested a load for "foo" on Solaris SPARC 5.7 we try to
java.management/share/classes/javax/management/loading/MLet.java-1056- // load "SunOS/sparc/5.7/lib/libfoo.so" from the JAR file.
java.management/share/classes/javax/management/loading/MLet.java-1057- //
java.management/share/classes/javax/management/loading/MLet.java:1058: nativelibname = removeSpace(System.getProperty("os.name")) + File.separator +
java.management/share/classes/javax/management/loading/MLet.java-1059- removeSpace(System.getProperty("os.arch")) + File.separator +
java.management/share/classes/javax/management/loading/MLet.java-1060- removeSpace(System.getProperty("os.version")) + File.separator +
java.management/share/classes/javax/management/loading/MLet.java-1061- "lib" + File.separator + nativelibname;
java.management/share/classes/javax/management/loading/MLet.java-1062- if (MLET_LOGGER.isLoggable(Level.TRACE)) {
--
java.management/share/classes/sun/management/VMManagementImpl.java-223- // Operating System
java.management/share/classes/sun/management/VMManagementImpl.java-224- public String getOsName() {
java.management/share/classes/sun/management/VMManagementImpl.java:225: return System.getProperty("os.name");
java.management/share/classes/sun/management/VMManagementImpl.java-226- }
java.management/share/classes/sun/management/VMManagementImpl.java-227- public String getOsArch() {
java.management/share/classes/sun/management/VMManagementImpl.java-228- return System.getProperty("os.arch");
java.management/share/classes/sun/management/VMManagementImpl.java-229- }
--
jdk.compiler/share/classes/com/sun/tools/javac/jvm/JNIWriter.java-99-
jdk.compiler/share/classes/com/sun/tools/javac/jvm/JNIWriter.java-100- private Context context;
jdk.compiler/share/classes/com/sun/tools/javac/jvm/JNIWriter.java-101-
jdk.compiler/share/classes/com/sun/tools/javac/jvm/JNIWriter.java-102- private static final boolean isWindows =
jdk.compiler/share/classes/com/sun/tools/javac/jvm/JNIWriter.java:103: System.getProperty("os.name").startsWith("Windows");
jdk.compiler/share/classes/com/sun/tools/javac/jvm/JNIWriter.java-104-
--
jdk.hotspot.agent/share/classes/sun/jvm/hotspot/utilities/PlatformInfo.java-29-
jdk.hotspot.agent/share/classes/sun/jvm/hotspot/utilities/PlatformInfo.java-30-public class PlatformInfo {
jdk.hotspot.agent/share/classes/sun/jvm/hotspot/utilities/PlatformInfo.java-31- /* Returns "win32" if Windows; "linux" if Linux. */
jdk.hotspot.agent/share/classes/sun/jvm/hotspot/utilities/PlatformInfo.java-32- public static String getOS() throws UnsupportedPlatformException {
jdk.hotspot.agent/share/classes/sun/jvm/hotspot/utilities/PlatformInfo.java:33: String os = System.getProperty("os.name");
jdk.hotspot.agent/share/classes/sun/jvm/hotspot/utilities/PlatformInfo.java-34- if (os.equals("Linux")) {
jdk.hotspot.agent/share/classes/sun/jvm/hotspot/utilities/PlatformInfo.java-35- return "linux";
jdk.hotspot.agent/share/classes/sun/jvm/hotspot/utilities/PlatformInfo.java-36- } else if (os.equals("FreeBSD")) {
jdk.hotspot.agent/share/classes/sun/jvm/hotspot/utilities/PlatformInfo.java-37- return "bsd";
--
jdk.internal.le/share/classes/jdk/internal/org/jline/terminal/impl/ExecPty.java-131- }
jdk.internal.le/share/classes/jdk/internal/org/jline/terminal/impl/ExecPty.java:132: String undef = System.getProperty("os.name").toLowerCase().startsWith("hp") ? "^-" : "undef";
jdk.internal.le/share/classes/jdk/internal/org/jline/terminal/impl/ExecPty.java-133- for (ControlChar cchar : ControlChar.values()) {
jdk.internal.le/share/classes/jdk/internal/org/jline/terminal/impl/ExecPty.java-134- int v = attr.getControlChar(cchar);
jdk.internal.le/share/classes/jdk/internal/org/jline/terminal/impl/ExecPty.java-135- if (v >= 0 && v != current.getControlChar(cchar)) {
jdk.internal.le/share/classes/jdk/internal/org/jline/terminal/impl/ExecPty.java-136- String str = "";
--
jdk.internal.le/share/classes/jdk/internal/org/jline/terminal/impl/Diag.java-28-
jdk.internal.le/share/classes/jdk/internal/org/jline/terminal/impl/Diag.java-29- static void diag(PrintStream out) {
jdk.internal.le/share/classes/jdk/internal/org/jline/terminal/impl/Diag.java-30- out.println("System properties");
jdk.internal.le/share/classes/jdk/internal/org/jline/terminal/impl/Diag.java-31- out.println("=================");
jdk.internal.le/share/classes/jdk/internal/org/jline/terminal/impl/Diag.java:32: out.println("os.name = " + System.getProperty("os.name"));
jdk.internal.le/share/classes/jdk/internal/org/jline/terminal/impl/Diag.java-33- out.println("OSTYPE = " + System.getenv("OSTYPE"));
jdk.internal.le/share/classes/jdk/internal/org/jline/terminal/impl/Diag.java-34- out.println("MSYSTEM = " + System.getenv("MSYSTEM"));
jdk.internal.le/share/classes/jdk/internal/org/jline/terminal/impl/Diag.java-35- out.println("PWD = " + System.getenv("PWD"));
jdk.internal.le/share/classes/jdk/internal/org/jline/terminal/impl/Diag.java-36- out.println("ConEmuPID = " + System.getenv("ConEmuPID"));
--
jdk.internal.le/share/classes/jdk/internal/org/jline/utils/OSUtils.java-13-import java.nio.file.Paths;
jdk.internal.le/share/classes/jdk/internal/org/jline/utils/OSUtils.java-14-
jdk.internal.le/share/classes/jdk/internal/org/jline/utils/OSUtils.java-15-public class OSUtils {
jdk.internal.le/share/classes/jdk/internal/org/jline/utils/OSUtils.java-16-
jdk.internal.le/share/classes/jdk/internal/org/jline/utils/OSUtils.java:17: public static final boolean IS_WINDOWS = System.getProperty("os.name").toLowerCase().contains("win");
jdk.internal.le/share/classes/jdk/internal/org/jline/utils/OSUtils.java-18-
jdk.internal.le/share/classes/jdk/internal/org/jline/utils/OSUtils.java-19- public static final boolean IS_CYGWIN = IS_WINDOWS
jdk.internal.le/share/classes/jdk/internal/org/jline/utils/OSUtils.java-20- && System.getenv("PWD") != null
jdk.internal.le/share/classes/jdk/internal/org/jline/utils/OSUtils.java-21- && System.getenv("PWD").startsWith("/");
--
jdk.internal.le/share/classes/jdk/internal/org/jline/utils/OSUtils.java-38-
jdk.internal.le/share/classes/jdk/internal/org/jline/utils/OSUtils.java-39- public static final boolean IS_CONEMU = IS_WINDOWS
jdk.internal.le/share/classes/jdk/internal/org/jline/utils/OSUtils.java-40- && System.getenv("ConEmuPID") != null;
jdk.internal.le/share/classes/jdk/internal/org/jline/utils/OSUtils.java-41-
jdk.internal.le/share/classes/jdk/internal/org/jline/utils/OSUtils.java:42: public static final boolean IS_OSX = System.getProperty("os.name").toLowerCase().contains("mac");
jdk.internal.le/share/classes/jdk/internal/org/jline/utils/OSUtils.java:43: public static final boolean IS_AIX = System.getProperty("os.name").equals("AIX");
jdk.internal.le/share/classes/jdk/internal/org/jline/utils/OSUtils.java-44-
--
jdk.internal.vm.ci/share/classes/jdk/vm/ci/services/Services.java-349- case LINUX: return "Linux";
jdk.internal.vm.ci/share/classes/jdk/vm/ci/services/Services.java-350- case MACOS: return "Mac OS X";
jdk.internal.vm.ci/share/classes/jdk/vm/ci/services/Services.java-351- case AIX: return "AIX";
jdk.internal.vm.ci/share/classes/jdk/vm/ci/services/Services.java-352- case WINDOWS: {
jdk.internal.vm.ci/share/classes/jdk/vm/ci/services/Services.java:353: String osName = System.getProperty("os.name");
jdk.internal.vm.ci/share/classes/jdk/vm/ci/services/Services.java-354- if (osName.startsWith("Windows")) {
jdk.internal.vm.ci/share/classes/jdk/vm/ci/services/Services.java-355- // Use original value which is often more "complete"
jdk.internal.vm.ci/share/classes/jdk/vm/ci/services/Services.java-356- // E.g. "Windows Server 2012"
jdk.internal.vm.ci/share/classes/jdk/vm/ci/services/Services.java-357- return osName;
--
jdk.security.auth/share/classes/com/sun/security/auth/module/NTLoginModule.java-148- }
jdk.security.auth/share/classes/com/sun/security/auth/module/NTLoginModule.java-149- throw new FailedLoginException
jdk.security.auth/share/classes/com/sun/security/auth/module/NTLoginModule.java-150- ("Failed in attempt to import the " +
jdk.security.auth/share/classes/com/sun/security/auth/module/NTLoginModule.java-151- "underlying NT system identity information" +
jdk.security.auth/share/classes/com/sun/security/auth/module/NTLoginModule.java:152: " on " + System.getProperty("os.name"));
jdk.security.auth/share/classes/com/sun/security/auth/module/NTLoginModule.java-153- }
--
jdk.security.auth/share/classes/com/sun/security/auth/module/UnixLoginModule.java-128- succeeded = false;
jdk.security.auth/share/classes/com/sun/security/auth/module/UnixLoginModule.java-129- throw new FailedLoginException
jdk.security.auth/share/classes/com/sun/security/auth/module/UnixLoginModule.java-130- ("Failed in attempt to import " +
jdk.security.auth/share/classes/com/sun/security/auth/module/UnixLoginModule.java-131- "the underlying system identity information" +
jdk.security.auth/share/classes/com/sun/security/auth/module/UnixLoginModule.java:132: " on " + System.getProperty("os.name"));
jdk.security.auth/share/classes/com/sun/security/auth/module/UnixLoginModule.java-133- }
--
jdk.zipfs/share/classes/jdk/nio/zipfs/ZipFileSystem.java-83-class ZipFileSystem extends FileSystem {
jdk.zipfs/share/classes/jdk/nio/zipfs/ZipFileSystem.java-84- // statics
jdk.zipfs/share/classes/jdk/nio/zipfs/ZipFileSystem.java-85- @SuppressWarnings("removal")
jdk.zipfs/share/classes/jdk/nio/zipfs/ZipFileSystem.java-86- private static final boolean isWindows = AccessController.doPrivileged(
jdk.zipfs/share/classes/jdk/nio/zipfs/ZipFileSystem.java:87: (PrivilegedAction<Boolean>)()->System.getProperty("os.name")
jdk.zipfs/share/classes/jdk/nio/zipfs/ZipFileSystem.java-88- .startsWith("Windows"));
jdk.zipfs/share/classes/jdk/nio/zipfs/ZipFileSystem.java-89- private static final byte[] ROOTPATH = new byte[] { '/' };
jdk.zipfs/share/classes/jdk/nio/zipfs/ZipFileSystem.java-90- private static final String PROPERTY_POSIX = "enablePosixFileAttributes";
jdk.zipfs/share/classes/jdk/nio/zipfs/ZipFileSystem.java-91- private static final String PROPERTY_DEFAULT_OWNER = "defaultOwner";
Any idea why it is done so seldom in the codebase ? ZipFileSystem.java does it, but most other calls (see above) seems to omit / 'forget' it . Is there something about the other calls, that it is not needed there ?
-------------
PR Comment: https://git.openjdk.org/jdk/pull/15308#issuecomment-1702726371
More information about the core-libs-dev
mailing list