/***************************************************************************** * exit.c: LibVLC termination event ***************************************************************************** * Copyright (C) 2009-2010 VLC authors and VideoLAN * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; either version 2.1 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program; if not, write to the Free Software Foundation, * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. *****************************************************************************/ #ifdef HAVE_CONFIG_H # include "config.h" #endif #include #include #include "libvlc.h" #include "../lib/libvlc_internal.h" void vlc_ExitInit( vlc_exit_t *exit ) { vlc_mutex_init( &exit->lock ); exit->handler = NULL; exit->opaque = NULL; } void vlc_ExitDestroy( vlc_exit_t *exit ) { vlc_mutex_destroy( &exit->lock ); } /** * Registers a callback for the LibVLC exit event. */ void libvlc_SetExitHandler( libvlc_int_t *p_libvlc, void (*handler) (void *), void *opaque ) { vlc_exit_t *exit = &libvlc_priv( p_libvlc )->exit; vlc_mutex_lock( &exit->lock ); exit->handler = handler; exit->opaque = opaque; vlc_mutex_unlock( &exit->lock ); } /** * 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 ) { vlc_exit_t *exit = &libvlc_priv( p_libvlc )->exit; msg_Dbg( p_libvlc, "exiting" ); vlc_mutex_lock( &exit->lock ); if( exit->handler != NULL ) exit->handler( exit->opaque ); else msg_Dbg( p_libvlc, "no exit handler" ); vlc_mutex_unlock( &exit->lock ); }