libbluray | branch: master | hpi1 <[email protected]> | Thu Apr 24 12:46:22 2014 +0300| [6cf64446bc70026ffa6ab6db1b152a23dcf1c8c7] | committer: hpi1
Status: release all listeners on shutdown > http://git.videolan.org/gitweb.cgi/libbluray.git/?a=commit;h=6cf64446bc70026ffa6ab6db1b152a23dcf1c8c7 --- src/libbluray/bdj/java/org/bluray/bdplus/Status.java | 11 +++++++++++ src/libbluray/bdj/java/org/dvb/io/ixc/IxcRegistry.java | 13 ++++++------- src/libbluray/bdj/java/org/videolan/BDJListeners.java | 10 ++++++++++ src/libbluray/bdj/java/org/videolan/Libbluray.java | 2 ++ 4 files changed, 29 insertions(+), 7 deletions(-) diff --git a/src/libbluray/bdj/java/org/bluray/bdplus/Status.java b/src/libbluray/bdj/java/org/bluray/bdplus/Status.java index aa413ab..0d64f02 100644 --- a/src/libbluray/bdj/java/org/bluray/bdplus/Status.java +++ b/src/libbluray/bdj/java/org/bluray/bdplus/Status.java @@ -32,6 +32,17 @@ public class Status { return instance; } + public static void shutdown() { + Status s; + synchronized (Status.class) { + s = instance; + instance = null; + } + if (s != null) { + s.listeners.clear(); + } + } + public void addListener(StatusListener listener) { listeners.add(listener); } 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 d68e1c1..8ad8e51 100644 --- a/src/libbluray/bdj/java/org/dvb/io/ixc/IxcRegistry.java +++ b/src/libbluray/bdj/java/org/dvb/io/ixc/IxcRegistry.java @@ -42,14 +42,13 @@ public class IxcRegistry { } public static void shutdown() { + IxcRegistryImpl r; synchronized (IxcRegistry.class) { - try { - if (registry != null) { - registry.unbindAll(); - } - } finally { - registry = null; - } + r = registry; + registry = null; + } + if (r != null) { + r.unbindAll(); } } diff --git a/src/libbluray/bdj/java/org/videolan/BDJListeners.java b/src/libbluray/bdj/java/org/videolan/BDJListeners.java index 796c65a..cd227c0 100644 --- a/src/libbluray/bdj/java/org/videolan/BDJListeners.java +++ b/src/libbluray/bdj/java/org/videolan/BDJListeners.java @@ -75,6 +75,16 @@ public class BDJListeners { } } + public void clear() { + if (null != BDJXletContext.getCurrentContext()) { + logger.error("clear() from wrong thread: " + Logger.dumpStack()); + return; + } + synchronized (listeners) { + listeners.clear(); + } + } + public void putCallback(Object event) { synchronized (listeners) { for (Iterator it = listeners.iterator(); it.hasNext(); ) { diff --git a/src/libbluray/bdj/java/org/videolan/Libbluray.java b/src/libbluray/bdj/java/org/videolan/Libbluray.java index 450299c..1be3794 100644 --- a/src/libbluray/bdj/java/org/videolan/Libbluray.java +++ b/src/libbluray/bdj/java/org/videolan/Libbluray.java @@ -28,6 +28,7 @@ import javax.media.PackageManager; import javax.tv.service.SIManagerImpl; import javax.tv.service.selection.ServiceContextFactory; +import org.bluray.bdplus.Status; import org.bluray.ti.DiscManager; import org.bluray.ti.TitleImpl; import org.bluray.ti.selection.TitleContext; @@ -137,6 +138,7 @@ public class Libbluray { BDToolkit.shutdownDisc(); SIManagerImpl.shutdown(); IxcRegistry.shutdown(); + Status.shutdown(); } catch (Throwable e) { e.printStackTrace(); } _______________________________________________ libbluray-devel mailing list [email protected] https://mailman.videolan.org/listinfo/libbluray-devel
