From de94406f0097da88e57f9a4f36acdbf50580a312 Mon Sep 17 00:00:00 2001 From: Filippo Carone Date: Sat, 10 Jan 2009 02:39:53 +0100 Subject: [PATCH] jvlc #23: make native resources release explicit --- .../src/main/java/org/videolan/jvlc/JVLC.java | 3 +++ .../org/videolan/jvlc/MediaDescriptor.java | 2 +- .../java/org/videolan/jvlc/MediaList.java | 23 +++++++++++++++---- .../org/videolan/jvlc/MediaListPlayer.java | 18 ++++++++++++++- .../java/org/videolan/jvlc/MediaPlayer.java | 18 +++++++++++++-- 5 files changed, 56 insertions(+), 8 deletions(-) diff --git a/bindings/java/core/src/main/java/org/videolan/jvlc/JVLC.java b/bindings/java/core/src/main/java/org/videolan/jvlc/JVLC.java index eef9a80dac..bcfd949371 100644 --- a/bindings/java/core/src/main/java/org/videolan/jvlc/JVLC.java +++ b/bindings/java/core/src/main/java/org/videolan/jvlc/JVLC.java @@ -176,6 +176,9 @@ public class JVLC vlm.release(); vlm = null; } + mediaList.release(); + mediaListPlayer.release(); + libvlc.libvlc_release(instance); } diff --git a/bindings/java/core/src/main/java/org/videolan/jvlc/MediaDescriptor.java b/bindings/java/core/src/main/java/org/videolan/jvlc/MediaDescriptor.java index 5b5f14ee96..4997f4c2e3 100644 --- a/bindings/java/core/src/main/java/org/videolan/jvlc/MediaDescriptor.java +++ b/bindings/java/core/src/main/java/org/videolan/jvlc/MediaDescriptor.java @@ -36,7 +36,7 @@ public class MediaDescriptor private LibVlcMedia instance; private LibVlc libvlc; private LibVlcEventManager eventManager; - private boolean released; + private volatile boolean released; private MediaPlayer mediaPlayer; diff --git a/bindings/java/core/src/main/java/org/videolan/jvlc/MediaList.java b/bindings/java/core/src/main/java/org/videolan/jvlc/MediaList.java index c7dcbd03b2..834c4bd9a3 100644 --- a/bindings/java/core/src/main/java/org/videolan/jvlc/MediaList.java +++ b/bindings/java/core/src/main/java/org/videolan/jvlc/MediaList.java @@ -26,7 +26,6 @@ package org.videolan.jvlc; import java.util.ArrayList; -import java.util.LinkedHashSet; import java.util.List; import org.videolan.jvlc.internal.LibVlc.LibVlcEventManager; @@ -42,10 +41,12 @@ public class MediaList private final LibVlcMediaList instance; - private final LibVlcEventManager eventManager; - private List items = new ArrayList(); + private LibVlcEventManager eventManager; + + private volatile boolean released; + public MediaList(JVLC jvlc) { this.jvlc = jvlc; @@ -188,7 +189,7 @@ public class MediaList @Override protected void finalize() throws Throwable { - jvlc.getLibvlc().libvlc_media_list_release(instance); + release(); super.finalize(); } @@ -201,6 +202,20 @@ public class MediaList return instance; } + /** + * + */ + public void release() + { + if (released) + { + return; + } + released = true; + + jvlc.getLibvlc().libvlc_media_list_release(instance); + } + } diff --git a/bindings/java/core/src/main/java/org/videolan/jvlc/MediaListPlayer.java b/bindings/java/core/src/main/java/org/videolan/jvlc/MediaListPlayer.java index b5e9a72c45..032008e455 100644 --- a/bindings/java/core/src/main/java/org/videolan/jvlc/MediaListPlayer.java +++ b/bindings/java/core/src/main/java/org/videolan/jvlc/MediaListPlayer.java @@ -35,6 +35,8 @@ public class MediaListPlayer private final LibVlcMediaListPlayer instance; private final JVLC jvlc; + + private volatile boolean released; public MediaListPlayer(JVLC jvlc) { @@ -172,8 +174,22 @@ public class MediaListPlayer @Override protected void finalize() throws Throwable { - jvlc.getLibvlc().libvlc_media_list_player_release(instance); + release(); super.finalize(); } + /** + * + */ + public void release() + { + if (released) + { + return; + } + released = true; + jvlc.getLibvlc().libvlc_media_list_player_release(instance); + + } + } diff --git a/bindings/java/core/src/main/java/org/videolan/jvlc/MediaPlayer.java b/bindings/java/core/src/main/java/org/videolan/jvlc/MediaPlayer.java index da069b6bae..8590e46459 100644 --- a/bindings/java/core/src/main/java/org/videolan/jvlc/MediaPlayer.java +++ b/bindings/java/core/src/main/java/org/videolan/jvlc/MediaPlayer.java @@ -51,6 +51,8 @@ public class MediaPlayer private MediaDescriptor mediaDescriptor; + private volatile boolean released; + MediaPlayer(JVLC jvlc, LibVlcMediaPlayer instance) { libvlc_exception_t exception = new libvlc_exception_t(); @@ -176,6 +178,18 @@ public class MediaPlayer @Override protected void finalize() throws Throwable { + release(); + super.finalize(); + } + + public void release() + { + if (released) + { + return; + } + released = true; + libvlc_exception_t exception = new libvlc_exception_t(); for (MediaPlayerCallback callback : callbacks) { @@ -187,9 +201,9 @@ public class MediaPlayer } } libvlc.libvlc_media_player_release(instance); - super.finalize(); + } - + /** * Returns the instance. * @return the instance -- 2.39.5