Commit cdfc1ede authored by Sam Hocevar's avatar Sam Hocevar
Browse files

* ./src/interface/main.c: if Ctrl-C doesn't kill vlc cleanly for any

    reason, user just needs to hit Ctrl-C again 1 second later and we'll
    exit disgustingly instead of freezing.
parent db488b01
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
* and spawn threads. * and spawn threads.
***************************************************************************** *****************************************************************************
* Copyright (C) 1998-2001 VideoLAN * Copyright (C) 1998-2001 VideoLAN
* $Id: main.c,v 1.189 2002/04/27 22:11:22 gbazin Exp $ * $Id: main.c,v 1.190 2002/05/09 21:24:22 sam Exp $
* *
* Authors: Vincent Seguin <seguin@via.ecp.fr> * Authors: Vincent Seguin <seguin@via.ecp.fr>
* Samuel Hocevar <sam@zoy.org> * Samuel Hocevar <sam@zoy.org>
...@@ -1130,21 +1130,40 @@ static void SimpleSignalHandler( int i_signal ) ...@@ -1130,21 +1130,40 @@ static void SimpleSignalHandler( int i_signal )
*****************************************************************************/ *****************************************************************************/
static void FatalSignalHandler( int i_signal ) static void FatalSignalHandler( int i_signal )
{ {
static mtime_t abort_time = 0;
static volatile boolean_t b_die = 0;
/* Once a signal has been trapped, the termination sequence will be /* Once a signal has been trapped, the termination sequence will be
* armed and following signals will be ignored to avoid sending messages * armed and following signals will be ignored to avoid sending messages
* to an interface having been destroyed */ * to an interface having been destroyed */
if( !b_die )
{
b_die = 1;
abort_time = mdate();
/* Acknowledge the signal received */
intf_ErrMsg( "intf error: signal %d received, exiting - do it again "
"if vlc gets stuck", i_signal );
/* Try to terminate everything - this is done by requesting the end
* of the interface thread */
p_main->p_intf->b_die = 1;
return;
}
/* If user asks again 1 second later, die badly */
if( mdate() > abort_time + 1000000 )
{
#ifndef WIN32 #ifndef WIN32
signal( SIGINT, SIG_IGN ); signal( SIGINT, SIG_IGN );
signal( SIGHUP, SIG_IGN ); signal( SIGHUP, SIG_IGN );
signal( SIGQUIT, SIG_IGN ); signal( SIGQUIT, SIG_IGN );
#endif #endif
/* Acknowledge the signal received */ intf_ErrMsg( "intf error: user insisted too much, dying badly" );
intf_ErrMsg( "intf error: signal %d received, exiting", i_signal ); exit( 1 );
}
/* Try to terminate everything - this is done by requesting the end of the
* interface thread */
p_main->p_intf->b_die = 1;
} }
/***************************************************************************** /*****************************************************************************
......
Supports Markdown
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