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 *),
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,
......
......@@ -225,7 +225,6 @@ libvlc_InternalCleanup
libvlc_InternalCreate
libvlc_InternalDestroy
libvlc_InternalInit
libvlc_InternalWait
libvlc_Quit
libvlc_SetExitHandler
make_URI
......
......@@ -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 );
}
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