1
0
Fork 0
mirror of https://github.com/geometer/FBReaderJ.git synced 2025-10-04 10:19:33 +02:00

avoid multiple plugin instances

This commit is contained in:
Nikolay Pultsin 2015-02-28 11:27:22 +00:00
parent 0431c36fc4
commit 22fcf7851b

View file

@ -31,7 +31,7 @@ public class PluginCollection {
System.loadLibrary("NativeFormats-v4"); System.loadLibrary("NativeFormats-v4");
} }
private static PluginCollection ourInstance; private static volatile PluginCollection ourInstance;
private final List<BuiltinFormatPlugin> myBuiltinPlugins = private final List<BuiltinFormatPlugin> myBuiltinPlugins =
new LinkedList<BuiltinFormatPlugin>(); new LinkedList<BuiltinFormatPlugin>();
@ -39,16 +39,23 @@ public class PluginCollection {
new LinkedList<ExternalFormatPlugin>(); new LinkedList<ExternalFormatPlugin>();
public static PluginCollection Instance() { public static PluginCollection Instance() {
if (ourInstance == null) {
createInstance();
}
return ourInstance;
}
private static synchronized void createInstance() {
if (ourInstance == null) { if (ourInstance == null) {
ourInstance = new PluginCollection(); 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()) { for (NativeFormatPlugin p : ourInstance.nativePlugins()) {
ourInstance.myBuiltinPlugins.add(p); ourInstance.myBuiltinPlugins.add(p);
System.err.println("native plugin: " + p); System.err.println("native plugin: " + p);
} }
} }
return ourInstance;
} }
public static void deleteInstance() { public static void deleteInstance() {