static void remote_fileio_ctrl_c_signal_handler (int signo) { remote_fileio_sig_set (SIG_IGN); remote_fio_ctrl_c_flag = 1; if (!remote_fio_no_longjmp) gdb_call_async_signal_handler (sigint_fileio_token, 1); remote_fileio_sig_set (remote_fileio_ctrl_c_signal_handler); }
/* Tell the event loop what to do if SIGINT is received. See event-signal.c. */ void handle_sigint (int sig) { signal (sig, handle_sigint); /* We could be running in a loop reading in symfiles or something so it may be quite a while before we get back to the event loop. So set quit_flag to 1 here. Then if QUIT is called before we get to the event loop, we will unwind as expected. */ set_quit_flag (); /* If immediate_quit is set, we go ahead and process the SIGINT right away, even if we usually would defer this to the event loop. The assumption here is that it is safe to process ^C immediately if immediate_quit is set. If we didn't, SIGINT would be really processed only the next time through the event loop. To get to that point, though, the command that we want to interrupt needs to finish first, which is unacceptable. If immediate quit is not set, we process SIGINT the next time through the loop, which is fine. */ gdb_call_async_signal_handler (sigint_token, immediate_quit); }