diff --git a/src/main/java/org/xerial/snappy/SnappyLoader.java b/src/main/java/org/xerial/snappy/SnappyLoader.java index 22d96e1..bf4c9e8 100755 --- a/src/main/java/org/xerial/snappy/SnappyLoader.java +++ b/src/main/java/org/xerial/snappy/SnappyLoader.java @@ -112,7 +112,7 @@ public class SnappyLoader return isLoaded; } - static SnappyNativeAPI load() { + static synchronized SnappyNativeAPI load() { if (isInitialized) return api; @@ -194,7 +194,7 @@ public class SnappyLoader throw new SnappyError(SnappyErrorCode.FAILED_TO_LOAD_NATIVE_LIBRARY, ee.getMessage()); } catch (Exception e2) { - throw new SnappyError(SnappyErrorCode.FAILED_TO_LOAD_NATIVE_LIBRARY, e.getMessage()); + throw new SnappyError(SnappyErrorCode.FAILED_TO_LOAD_NATIVE_LIBRARY, e2.getMessage()); } } catch (Exception e) { diff --git a/src/main/resources/org/xerial/snappy/SnappyNativeLoader.bytecode b/src/main/resources/org/xerial/snappy/SnappyNativeLoader.bytecode index 93bdcce..64c0fe8 100755 Binary files a/src/main/resources/org/xerial/snappy/SnappyNativeLoader.bytecode and b/src/main/resources/org/xerial/snappy/SnappyNativeLoader.bytecode differ diff --git a/src/main/resources/org/xerial/snappy/SnappyNativeLoader.java b/src/main/resources/org/xerial/snappy/SnappyNativeLoader.java index 1883166..967912c 100755 --- a/src/main/resources/org/xerial/snappy/SnappyNativeLoader.java +++ b/src/main/resources/org/xerial/snappy/SnappyNativeLoader.java @@ -31,7 +31,7 @@ public class SnappyNativeLoader private static HashMap loadedLibFiles = new HashMap(); private static HashMap loadedLib = new HashMap(); - public static void load(String lib) { + public static synchronized void load(String lib) { if (loadedLibFiles.containsKey(lib) && loadedLibFiles.get(lib) == true) return; @@ -44,7 +44,7 @@ public class SnappyNativeLoader } } - public static void loadLibrary(String libname) { + public static synchronized void loadLibrary(String libname) { if (loadedLib.containsKey(libname) && loadedLib.get(libname) == true) return; diff --git a/src/test/java/org/xerial/snappy/SnappyLoaderTest.java b/src/test/java/org/xerial/snappy/SnappyLoaderTest.java index 87663b6..db862f7 100755 --- a/src/test/java/org/xerial/snappy/SnappyLoaderTest.java +++ b/src/test/java/org/xerial/snappy/SnappyLoaderTest.java @@ -82,6 +82,13 @@ public class SnappyLoaderTest ClassLoader parent = this.getClass().getClassLoader().getParent(); ClassWorld cw = new ClassWorld(); ClassRealm P = cw.newRealm("P", parent); + try { + P.loadClass("org.xerial.snappy.Snappy"); + fail("org.xerial.snappy.Snappy is found in the parent"); + } + catch (ClassNotFoundException e) { + // OK + } // Prepare the child class loaders which can load Snappy.class URL classPath = new File("target/classes").toURI().toURL();