jvlc #23: make native resources release explicit

This commit is contained in:
Filippo Carone 2009-01-10 02:39:53 +01:00
parent 0db07ccfec
commit de94406f00
5 changed files with 56 additions and 8 deletions

View File

@ -176,6 +176,9 @@ public class JVLC
vlm.release();
vlm = null;
}
mediaList.release();
mediaListPlayer.release();
libvlc.libvlc_release(instance);
}

View File

@ -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;

View File

@ -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<String> items = new ArrayList<String>();
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);
}
}

View File

@ -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);
}
}

View File

@ -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