libbluray | branch: master | hpi1 <[email protected]> | Wed Mar 23 13:43:10 2016 +0200| [47812009532738044d6a3d22cdcf1cb99825ef96] | committer: hpi1
BD-J: use dedicated locks for global object creation/destruction > http://git.videolan.org/gitweb.cgi/libbluray.git/?a=commit;h=47812009532738044d6a3d22cdcf1cb99825ef96 --- .../bdj/java/javax/tv/service/SIManagerImpl.java | 7 +++++-- .../bdj/java/org/bluray/bdplus/Status.java | 7 +++++-- .../bdj/java/org/bluray/ti/DiscManager.java | 13 +++++++++---- .../bdj/java/org/dvb/event/EventManager.java | 7 +++++-- .../bdj/java/org/dvb/io/ixc/IxcRegistry.java | 6 ++++-- .../java/org/dvb/user/UserPreferenceManager.java | 4 +++- .../bdj/java/org/videolan/BDJAppsDatabase.java | 5 ++++- .../bdj/java/org/videolan/GUIManager.java | 20 ++++++++++++-------- 8 files changed, 47 insertions(+), 22 deletions(-) diff --git a/src/libbluray/bdj/java/javax/tv/service/SIManagerImpl.java b/src/libbluray/bdj/java/javax/tv/service/SIManagerImpl.java index f9d4a32..3ab923d 100644 --- a/src/libbluray/bdj/java/javax/tv/service/SIManagerImpl.java +++ b/src/libbluray/bdj/java/javax/tv/service/SIManagerImpl.java @@ -34,8 +34,11 @@ import org.bluray.ti.TitleImpl; import org.videolan.Libbluray; public class SIManagerImpl extends SIManager { + + private static final Object instanceLock = new Object(); + public static SIManager createInstance() { - synchronized (SIManagerImpl.class) { + synchronized (instanceLock) { if (instance == null) instance = new SIManagerImpl(); return instance; @@ -43,7 +46,7 @@ public class SIManagerImpl extends SIManager { } public static void shutdown() { - synchronized (SIManagerImpl.class) { + synchronized (instanceLock) { instance = null; } } diff --git a/src/libbluray/bdj/java/org/bluray/bdplus/Status.java b/src/libbluray/bdj/java/org/bluray/bdplus/Status.java index b897b3e..0d473b0 100644 --- a/src/libbluray/bdj/java/org/bluray/bdplus/Status.java +++ b/src/libbluray/bdj/java/org/bluray/bdplus/Status.java @@ -24,8 +24,11 @@ import org.videolan.Libbluray; import org.videolan.Logger; public class Status { + + private static final Object instanceLock = new Object(); + public static Status getInstance() { - synchronized (Status.class) { + synchronized (instanceLock) { if (instance == null) instance = new Status(); return instance; @@ -34,7 +37,7 @@ public class Status { public static void shutdown() { Status s; - synchronized (Status.class) { + synchronized (instanceLock) { s = instance; instance = null; } diff --git a/src/libbluray/bdj/java/org/bluray/ti/DiscManager.java b/src/libbluray/bdj/java/org/bluray/ti/DiscManager.java index c43f472..02ea654 100644 --- a/src/libbluray/bdj/java/org/bluray/ti/DiscManager.java +++ b/src/libbluray/bdj/java/org/bluray/ti/DiscManager.java @@ -22,10 +22,15 @@ package org.bluray.ti; import java.util.LinkedList; public class DiscManager { - public static synchronized DiscManager getDiscManager() { - if (instance == null) - instance = new DiscManager(); - return instance; + + private static final Object instanceLock = new Object(); + + public static DiscManager getDiscManager() { + synchronized (instanceLock) { + if (instance == null) + instance = new DiscManager(); + return instance; + } } public void expectNextDisc(String[] discIds) { diff --git a/src/libbluray/bdj/java/org/dvb/event/EventManager.java b/src/libbluray/bdj/java/org/dvb/event/EventManager.java index 844b72d..9b7206e 100644 --- a/src/libbluray/bdj/java/org/dvb/event/EventManager.java +++ b/src/libbluray/bdj/java/org/dvb/event/EventManager.java @@ -36,8 +36,11 @@ import org.videolan.GUIManager; import org.videolan.Logger; public class EventManager implements ResourceServer { + + private static final Object instanceLock = new Object(); + public static EventManager getInstance() { - synchronized (EventManager.class) { + synchronized (instanceLock) { if (instance == null) instance = new EventManager(); return instance; @@ -46,7 +49,7 @@ public class EventManager implements ResourceServer { public static void shutdown() { EventManager e; - synchronized (EventManager.class) { + synchronized (instanceLock) { e = instance; instance = null; } diff --git a/src/libbluray/bdj/java/org/dvb/io/ixc/IxcRegistry.java b/src/libbluray/bdj/java/org/dvb/io/ixc/IxcRegistry.java index 8ad8e51..6054849 100644 --- a/src/libbluray/bdj/java/org/dvb/io/ixc/IxcRegistry.java +++ b/src/libbluray/bdj/java/org/dvb/io/ixc/IxcRegistry.java @@ -30,10 +30,12 @@ import org.videolan.IxcRegistryImpl; public class IxcRegistry { + private static final Object instanceLock = new Object(); + private static IxcRegistryImpl registry = null; private static IxcRegistryImpl getIxcRegistry() { - synchronized (IxcRegistry.class) { + synchronized (instanceLock) { if (registry == null) { registry = new IxcRegistryImpl(); } @@ -43,7 +45,7 @@ public class IxcRegistry { public static void shutdown() { IxcRegistryImpl r; - synchronized (IxcRegistry.class) { + synchronized (instanceLock) { r = registry; registry = null; } diff --git a/src/libbluray/bdj/java/org/dvb/user/UserPreferenceManager.java b/src/libbluray/bdj/java/org/dvb/user/UserPreferenceManager.java index af86b4e..1367d1d 100644 --- a/src/libbluray/bdj/java/org/dvb/user/UserPreferenceManager.java +++ b/src/libbluray/bdj/java/org/dvb/user/UserPreferenceManager.java @@ -27,8 +27,10 @@ public class UserPreferenceManager { private UserPreferenceManager() { } + private static final Object instanceLock = new Object(); + public static UserPreferenceManager getInstance() { - synchronized (UserPreferenceManager.class) { + synchronized (instanceLock) { if (instance == null) instance = new UserPreferenceManager(); return instance; diff --git a/src/libbluray/bdj/java/org/videolan/BDJAppsDatabase.java b/src/libbluray/bdj/java/org/videolan/BDJAppsDatabase.java index 8fea525..7a22dba 100644 --- a/src/libbluray/bdj/java/org/videolan/BDJAppsDatabase.java +++ b/src/libbluray/bdj/java/org/videolan/BDJAppsDatabase.java @@ -31,8 +31,11 @@ import org.videolan.bdjo.AppEntry; import org.videolan.bdjo.Bdjo; public class BDJAppsDatabase extends AppsDatabase { + + private static final Object instanceLock = new Object(); + static public AppsDatabase getAppsDatabase() { - synchronized (BDJAppsDatabase.class) { + synchronized (instanceLock) { if (instance == null) instance = new BDJAppsDatabase(); return instance; diff --git a/src/libbluray/bdj/java/org/videolan/GUIManager.java b/src/libbluray/bdj/java/org/videolan/GUIManager.java index 0c7f578..27c2826 100644 --- a/src/libbluray/bdj/java/org/videolan/GUIManager.java +++ b/src/libbluray/bdj/java/org/videolan/GUIManager.java @@ -30,14 +30,18 @@ public class GUIManager extends BDRootWindow { private GUIManager() { } - public static synchronized GUIManager createInstance() { - if (instance == null) { - instance = new GUIManager(); - } else { - instance.clearOverlay(); - instance.setDefaultFont(null); + private static final Object instanceLock = new Object(); + + public static GUIManager createInstance() { + synchronized (instanceLock) { + if (instance == null) { + instance = new GUIManager(); + } else { + instance.clearOverlay(); + instance.setDefaultFont(null); + } + return instance; } - return instance; } public static synchronized GUIManager getInstance() { @@ -69,7 +73,7 @@ public class GUIManager extends BDRootWindow { } protected static void shutdown() throws Throwable { - synchronized (GUIManager.class) { + synchronized (instanceLock) { if (instance != null) { instance.setVisible(false); instance.removeAll(); _______________________________________________ libbluray-devel mailing list [email protected] https://mailman.videolan.org/listinfo/libbluray-devel
