- i_ret = VLC_AddIntf( 0, NULL, VLC_TRUE, VLC_TRUE );
-
- /* Finish the threads */
- VLC_CleanUp( 0 );
-
- Kill ();
-
- /* Destroy the libvlc structure */
- VLC_Destroy( 0 );
-
-#if !defined(WIN32) && !defined(UNDER_CE)
- pthread_cancel (sigth);
-# ifdef __APPLE__
- /* In Mac OS X up to 10.4.8 sigwait (among others) is not a pthread
- * cancellation point, so we throw a dummy quit signal to end
- * sigwait() in the sigth thread */
- pthread_kill (sigth, SIGQUIT);
-# endif
- pthread_join (sigth, NULL);
-#endif
-
- return i_ret;
-}
-
-#if !defined(WIN32) && !defined(UNDER_CE)
-/*****************************************************************************
- * SigHandler: system signal handler
- *****************************************************************************
- * This thread receives all handled signals synchronously.
- * It tries to end the program in a clean way.
- *****************************************************************************/
-static void *SigHandler (void *data)
-{
- const sigset_t *set = (sigset_t *)data;
- time_t abort_time = 0;
- vlc_bool_t b_die = VLC_FALSE;
-
- for (;;)
- {
- int i_signal, state;
- (void)sigwait (set, &i_signal);
-
-#ifdef __APPLE__
- /* In Mac OS X up to 10.4.8 sigwait (among others) is not a pthread
- * cancellation point */
- pthread_testcancel();
-#endif
-
- /* Once a signal has been trapped, the termination sequence will be
- * armed and subsequent signals will be ignored to avoid sending
- * signals to a libvlc structure having been destroyed */
-
- pthread_setcancelstate (PTHREAD_CANCEL_DISABLE, &state);
- if (!b_die)
- {
- b_die = VLC_TRUE;
- abort_time = time (NULL);
-
- fprintf (stderr, "signal %d received, terminating vlc - do it "
- "again in case it gets stuck\n", i_signal);
-
- /* Acknowledge the signal received */
- Kill ();
- }
- else if( time( NULL ) > abort_time + 2 )
- {
- /* If user asks again 1 or 2 seconds later, die badly */
- pthread_sigmask (SIG_UNBLOCK, set, NULL);
- fprintf (stderr, "user insisted too much, dying badly\n");
- abort ();
- }
- pthread_setcancelstate (state, NULL);
- }
- /* Never reached */
-}
-
-
-#include <stdbool.h>
-static void Kill (void)
-{
- static pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER;
- static bool killed = false;;
- pthread_mutex_lock (&lock);
- if (!killed)