]> git.sesse.net Git - vlc/commitdiff
Remove libvlc_InternalWait() and simplify
authorRémi Denis-Courmont <remi@remlab.net>
Mon, 7 May 2012 16:24:05 +0000 (19:24 +0300)
committerRémi Denis-Courmont <remi@remlab.net>
Mon, 7 May 2012 16:41:46 +0000 (19:41 +0300)
lib/core.c
src/libvlccore.sym
src/misc/exit.c

index a340d11262eae17c6cef08a61a5d62bb3d95dc80..a1a722a2bdb47713ca0de2b56a74bc8630c788c6 100644 (file)
@@ -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,
index 71b984b7c8f9685e6092e06561d2014788efe876..faa618219ad7bc4304ae1cf17f57497e72e6c18e 100644 (file)
@@ -225,7 +225,6 @@ libvlc_InternalCleanup
 libvlc_InternalCreate
 libvlc_InternalDestroy
 libvlc_InternalInit
-libvlc_InternalWait
 libvlc_Quit
 libvlc_SetExitHandler
 make_URI
index ed02af7e63c11ea722c4f55307b935a482e24b1c..9667bd45f4397fd87bf81d9d7be3d2cab1b2b06c 100644 (file)
@@ -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 );
-}