From: RĂ©mi Denis-Courmont Date: Mon, 7 May 2012 16:24:05 +0000 (+0300) Subject: Remove libvlc_InternalWait() and simplify X-Git-Tag: 2.1.0-git~4485 X-Git-Url: https://git.sesse.net/?a=commitdiff_plain;h=4e1d5325e9731aa3c4817a067fc66e19d41da341;p=vlc Remove libvlc_InternalWait() and simplify --- diff --git a/lib/core.c b/lib/core.c index a340d11262..a1a722a2bd 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 71b984b7c8..faa618219a 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 ed02af7e63..9667bd45f4 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 ); -}