# HG changeset patch # User reimar # Date 1199828444 0 # Node ID b955a135e3a80b12b2d2fee964044d95c1973803 # Parent e410a38a4ca886ad83eb7c3c213dc9ac5aeb29e8 Do not use exit_player in the signal handler, this code just can not be called from a signal handler. Instead only make the input system generate quit commands for the first CTRL+C and otherwise do getch2_disable and exit. diff -r e410a38a4ca8 -r b955a135e3a8 input/input.c --- a/input/input.c Tue Jan 08 12:46:20 2008 +0000 +++ b/input/input.c Tue Jan 08 21:40:44 2008 +0000 @@ -541,6 +541,8 @@ // Callback to allow the menu filter to grab the incoming keys int (*mp_input_key_cb)(int code) = NULL; +int async_quit_request; + static mp_input_fd_t key_fds[MP_MAX_KEY_FD]; static unsigned int num_key_fd = 0; static mp_input_fd_t cmd_fds[MP_MAX_CMD_FD]; @@ -1312,6 +1314,8 @@ mp_cmd_filter_t* cf; int from_queue; + if (async_quit_request) + return mp_input_parse_cmd("quit 1"); while(1) { from_queue = 1; ret = mp_input_get_queued_cmd(peek_only); diff -r e410a38a4ca8 -r b955a135e3a8 input/input.h --- a/input/input.h Tue Jan 08 12:46:20 2008 +0000 +++ b/input/input.h Tue Jan 08 21:40:44 2008 +0000 @@ -298,4 +298,6 @@ int mp_input_check_interrupt(int time); +extern int async_quit_request; + #endif /* INPUT_H */ diff -r e410a38a4ca8 -r b955a135e3a8 mplayer.c --- a/mplayer.c Tue Jan 08 12:46:20 2008 +0000 +++ b/mplayer.c Tue Jan 08 21:40:44 2008 +0000 @@ -764,7 +764,8 @@ case SIGQUIT: case SIGTERM: case SIGKILL: - break; // killed from keyboard (^C) or killed [-9] + async_quit_request = 1; + return; // killed from keyboard (^C) or killed [-9] case SIGILL: #ifdef RUNTIME_CPUDETECT mp_msg(MSGT_CPLAYER,MSGL_FATAL,MSGTR_Exit_SIGILL_RTCpuSel); @@ -798,7 +799,8 @@ } #endif } - exit_player(NULL); + getch2_disable(); + exit(1); } extern void mp_input_register_options(m_config_t* cfg);