Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 15 additions & 0 deletions src/java.base/share/classes/java/lang/System.java
Original file line number Diff line number Diff line change
Expand Up @@ -1968,6 +1968,21 @@ private static void initPhase3() {

// system is fully initialized
VM.initLevel(4);

// if the property java.nio.file.spi.DefaultFileSystemProvider is
// set then load the default provider (or a list)
String prop = "java.nio.file.spi.DefaultFileSystemProvider";
String propValue = System.getProperty(prop);
if (propValue != null) {
for (String cn: propValue.split(",")) {
try {
Class.forName(cn, true, ClassLoader.getSystemClassLoader());
} catch (Exception x) {
throw new Error(x);
}
}
}
VM.setCustomDefaultFileSystemProviderLoaded();
}

private static void setJavaLangAccess() {
Expand Down
2 changes: 1 addition & 1 deletion src/java.base/share/classes/java/nio/file/FileSystems.java
Original file line number Diff line number Diff line change
Expand Up @@ -171,7 +171,7 @@ private static FileSystemProvider getDefaultProvider() {
* @return the default file system
*/
public static FileSystem getDefault() {
if (VM.isModuleSystemInited()) {
if (VM.isModuleSystemInited() && VM.isCustomDefaultFileSystemProviderLoaded()) {
return DefaultFileSystemHolder.defaultFileSystem;
} else {
// always use the platform's default file system during startup
Expand Down
17 changes: 17 additions & 0 deletions src/java.base/share/classes/jdk/internal/misc/VM.java
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ public class VM {

// 0, 1, 2, ...
private static volatile int initLevel;
private static volatile boolean isCustomDefaultFileSystemProviderLoaded = false;
private static final Object lock = new Object();

/**
Expand All @@ -67,6 +68,22 @@ public static void initLevel(int value) {
}
}

/**
* control the CustomDefaultFileSystemProvider loading status
*
* @see java.lang.System#initPhase3
*/
public static void setCustomDefaultFileSystemProviderLoaded() {
isCustomDefaultFileSystemProviderLoaded = true;
}

/**
* Returns the current customDefaultFileSystemProvider loading status
*/
public static boolean isCustomDefaultFileSystemProviderLoaded() {
return isCustomDefaultFileSystemProviderLoaded;
}

/**
* Returns the current init level.
*/
Expand Down