From 22fcf7851b173f15c8f3a2d48106b895285f19c4 Mon Sep 17 00:00:00 2001 From: Nikolay Pultsin Date: Sat, 28 Feb 2015 11:27:22 +0000 Subject: [PATCH] avoid multiple plugin instances --- .../fbreader/formats/PluginCollection.java | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/org/geometerplus/fbreader/formats/PluginCollection.java b/src/org/geometerplus/fbreader/formats/PluginCollection.java index 8b37dffaf..0b4b497df 100644 --- a/src/org/geometerplus/fbreader/formats/PluginCollection.java +++ b/src/org/geometerplus/fbreader/formats/PluginCollection.java @@ -31,7 +31,7 @@ public class PluginCollection { System.loadLibrary("NativeFormats-v4"); } - private static PluginCollection ourInstance; + private static volatile PluginCollection ourInstance; private final List myBuiltinPlugins = new LinkedList(); @@ -39,16 +39,23 @@ public class PluginCollection { new LinkedList(); public static PluginCollection Instance() { + if (ourInstance == null) { + createInstance(); + } + return ourInstance; + } + + private static synchronized void createInstance() { if (ourInstance == null) { ourInstance = new PluginCollection(); - // This code can not be moved to constructor because nativePlugins() is a native method + // This code cannot be moved to constructor + // because nativePlugins() is a native method for (NativeFormatPlugin p : ourInstance.nativePlugins()) { ourInstance.myBuiltinPlugins.add(p); System.err.println("native plugin: " + p); } } - return ourInstance; } public static void deleteInstance() {