summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--input/input.c4
-rw-r--r--input/input.h2
-rw-r--r--mplayer.c6
3 files changed, 10 insertions, 2 deletions
diff --git a/input/input.c b/input/input.c
index d1cf960991..ae8394074b 100644
--- a/input/input.c
+++ b/input/input.c
@@ -541,6 +541,8 @@ static mp_cmd_filter_t* cmd_filters = NULL;
// 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_input_get_cmd(int time, int paused, int peek_only) {
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 --git a/input/input.h b/input/input.h
index dfbdd4b136..1cfb4b23ed 100644
--- a/input/input.h
+++ b/input/input.h
@@ -298,4 +298,6 @@ mp_input_uninit(void);
int
mp_input_check_interrupt(int time);
+extern int async_quit_request;
+
#endif /* INPUT_H */
diff --git a/mplayer.c b/mplayer.c
index 895f5c1da1..a954b60bba 100644
--- a/mplayer.c
+++ b/mplayer.c
@@ -764,7 +764,8 @@ static void exit_sighandler(int x){
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 @@ static void exit_sighandler(int x){
}
#endif
}
- exit_player(NULL);
+ getch2_disable();
+ exit(1);
}
extern void mp_input_register_options(m_config_t* cfg);