Commit 4e1d5325 authored by Rémi Denis-Courmont's avatar Rémi Denis-Courmont

Remove libvlc_InternalWait() and simplify

parent 93143da0
...@@ -136,10 +136,20 @@ void libvlc_set_exit_handler( libvlc_instance_t *p_i, void (*cb) (void *), ...@@ -136,10 +136,20 @@ void libvlc_set_exit_handler( libvlc_instance_t *p_i, void (*cb) (void *),
libvlc_SetExitHandler( p_libvlc, cb, data ); 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 ) void libvlc_wait( libvlc_instance_t *p_i )
{ {
libvlc_int_t *p_libvlc = p_i->p_libvlc_int; vlc_sem_t sem;
libvlc_InternalWait( p_libvlc );
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, void libvlc_set_user_agent (libvlc_instance_t *p_i,
......
...@@ -225,7 +225,6 @@ libvlc_InternalCleanup ...@@ -225,7 +225,6 @@ libvlc_InternalCleanup
libvlc_InternalCreate libvlc_InternalCreate
libvlc_InternalDestroy libvlc_InternalDestroy
libvlc_InternalInit libvlc_InternalInit
libvlc_InternalWait
libvlc_Quit libvlc_Quit
libvlc_SetExitHandler libvlc_SetExitHandler
make_URI make_URI
......
...@@ -43,9 +43,6 @@ void vlc_ExitDestroy( vlc_exit_t *exit ) ...@@ -43,9 +43,6 @@ void vlc_ExitDestroy( vlc_exit_t *exit )
/** /**
* Registers a callback for the LibVLC exit event. * 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 libvlc_SetExitHandler( libvlc_int_t *p_libvlc, void (*handler) (void *),
void *opaque ) void *opaque )
...@@ -53,7 +50,7 @@ void libvlc_SetExitHandler( libvlc_int_t *p_libvlc, void (*handler) (void *), ...@@ -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_exit_t *exit = &libvlc_priv( p_libvlc )->exit;
vlc_mutex_lock( &exit->lock ); vlc_mutex_lock( &exit->lock );
if( exit->killed ) /* already exited! (race condition) */ if( exit->killed && handler != NULL ) /* already exited (race condition) */
handler( opaque ); handler( opaque );
exit->handler = handler; exit->handler = handler;
exit->opaque = opaque; exit->opaque = opaque;
...@@ -61,8 +58,7 @@ void libvlc_SetExitHandler( libvlc_int_t *p_libvlc, void (*handler) (void *), ...@@ -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 * Posts an exit signal to LibVLC instance.
* the main thread. It might take a while before the actual cleanup occurs.
* This function should only be called on behalf of the user. * This function should only be called on behalf of the user.
*/ */
void libvlc_Quit( libvlc_int_t *p_libvlc ) void libvlc_Quit( libvlc_int_t *p_libvlc )
...@@ -79,32 +75,3 @@ 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 ); 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 );
}
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment