[vlc-commits] Remove libvlc_InternalWait() and simplify
Rémi Denis-Courmont
git at videolan.org
Mon May 7 18:58:19 CEST 2012
vlc | branch: master | Rémi Denis-Courmont <remi at remlab.net> | Mon May 7 19:24:05 2012 +0300| [4e1d5325e9731aa3c4817a067fc66e19d41da341] | committer: Rémi Denis-Courmont
Remove libvlc_InternalWait() and simplify
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=4e1d5325e9731aa3c4817a067fc66e19d41da341
---
lib/core.c | 14 ++++++++++++--
src/libvlccore.sym | 1 -
src/misc/exit.c | 37 ++-----------------------------------
3 files changed, 14 insertions(+), 38 deletions(-)
diff --git a/lib/core.c b/lib/core.c
index a340d11..a1a722a 100644
--- a/lib/core.c
+++ b/lib/core.c
@@ -136,10 +136,20 @@ void libvlc_set_exit_handler( libvlc_instance_t *p_i, void (*cb) (void *),
libvlc_SetExitHandler( p_libvlc, cb, data );
}
+static void libvlc_wait_wakeup( void *data )
+{
+ vlc_sem_post( data );
+}
+
void libvlc_wait( libvlc_instance_t *p_i )
{
- libvlc_int_t *p_libvlc = p_i->p_libvlc_int;
- libvlc_InternalWait( p_libvlc );
+ vlc_sem_t sem;
+
+ vlc_sem_init( &sem, 0 );
+ libvlc_set_exit_handler( p_i, libvlc_wait_wakeup, &sem );
+ vlc_sem_wait( &sem );
+ libvlc_set_exit_handler( p_i, NULL, NULL );
+ vlc_sem_destroy( &sem );
}
void libvlc_set_user_agent (libvlc_instance_t *p_i,
diff --git a/src/libvlccore.sym b/src/libvlccore.sym
index 71b984b..faa6182 100644
--- a/src/libvlccore.sym
+++ b/src/libvlccore.sym
@@ -225,7 +225,6 @@ libvlc_InternalCleanup
libvlc_InternalCreate
libvlc_InternalDestroy
libvlc_InternalInit
-libvlc_InternalWait
libvlc_Quit
libvlc_SetExitHandler
make_URI
diff --git a/src/misc/exit.c b/src/misc/exit.c
index ed02af7..9667bd4 100644
--- a/src/misc/exit.c
+++ b/src/misc/exit.c
@@ -43,9 +43,6 @@ void vlc_ExitDestroy( vlc_exit_t *exit )
/**
* Registers a callback for the LibVLC exit event.
- *
- * @note This function conflicts with libvlc_InternalWait().
- * Use either or none of them, but not both.
*/
void libvlc_SetExitHandler( libvlc_int_t *p_libvlc, void (*handler) (void *),
void *opaque )
@@ -53,7 +50,7 @@ void libvlc_SetExitHandler( libvlc_int_t *p_libvlc, void (*handler) (void *),
vlc_exit_t *exit = &libvlc_priv( p_libvlc )->exit;
vlc_mutex_lock( &exit->lock );
- if( exit->killed ) /* already exited! (race condition) */
+ if( exit->killed && handler != NULL ) /* already exited (race condition) */
handler( opaque );
exit->handler = handler;
exit->opaque = opaque;
@@ -61,8 +58,7 @@ void libvlc_SetExitHandler( libvlc_int_t *p_libvlc, void (*handler) (void *),
}
/**
- * Posts an exit signal to LibVLC instance. This only emits a notification to
- * the main thread. It might take a while before the actual cleanup occurs.
+ * Posts an exit signal to LibVLC instance.
* This function should only be called on behalf of the user.
*/
void libvlc_Quit( libvlc_int_t *p_libvlc )
@@ -79,32 +75,3 @@ void libvlc_Quit( libvlc_int_t *p_libvlc )
}
vlc_mutex_unlock( &exit->lock );
}
-
-
-static void exit_wakeup( void *data )
-{
- vlc_cond_signal( data );
-}
-
-/**
- * Waits until the LibVLC instance gets an exit signal.
- * This normally occurs when the user "exits" an interface plugin. But it can
- * also be triggered by the special vlc://quit item, the update checker, or
- * the playlist engine.
- */
-void libvlc_InternalWait( libvlc_int_t *p_libvlc )
-{
- vlc_exit_t *exit = &libvlc_priv( p_libvlc )->exit;
- vlc_cond_t wait;
-
- vlc_cond_init( &wait );
-
- vlc_mutex_lock( &exit->lock );
- exit->handler = exit_wakeup;
- exit->opaque = &wait;
- while( !exit->killed )
- vlc_cond_wait( &wait, &exit->lock );
- vlc_mutex_unlock( &exit->lock );
-
- vlc_cond_destroy( &wait );
-}
More information about the vlc-commits
mailing list