* defs.h (quit_flag): Don't declare.

(clear_quit_flag, check_quit_flag, set_quit_flag): Declare.
	(QUIT): Use new functions.
	* event-top.c (command_handler): Use clear_quit_flag.
	(handle_sigint): Use set_quit_flag.
	(async_request_quit): Use check_quit_flag.  Don't check
	immediate_quit.
	* exceptions.c (throw_exception): Use clear_quit_flag.
	* main.c (captured_main): Use clear_quit_flag.
	* python/python.c (clear_quit_flag, set_quit_flag)
	(check_quit_flag): New functions.
	* remote-sim.c (gdb_os_poll_quit): Use check_quit_flag,
	clear_quit_flag.
	* remote.c (remote_wait_as): Use check_quit_flag,
	clear_quit_flag.
	(remote_start_remote): Call QUIT.
	* symfile.c (load_progress): Use check_quit_flag.
	* top.c (command_loop): Use clear_quit_flag.
	(command_line_input): Call QUIT.
	* utils.c (quit_flag): Conditionally define.
	(clear_quit_flag, check_quit_flag, set_quit_flag): New
	functions.
	(prompt_for_continue): Call QUIT.  Use quit, not
	async_request_quit.
	* remote-mips.c (mips_expect_timeout): Call QUIT.
	* monitor.c (monitor_expect): Call QUIT.
This commit is contained in:
Tom Tromey
2012-08-22 17:48:55 +00:00
parent b583003e10
commit 522002f96c
13 changed files with 131 additions and 16 deletions

View File

@@ -171,7 +171,27 @@ extern char *python_libdir;
/* Search path for separate debug files. */
extern char *debug_file_directory;
extern int quit_flag;
/* GDB has two methods for handling SIGINT. When immediate_quit is
nonzero, a SIGINT results in an immediate longjmp out of the signal
handler. Otherwise, SIGINT simply sets a flag; code that might
take a long time, and which ought to be interruptible, checks this
flag using the QUIT macro.
If GDB is built with Python support, it uses Python's low-level
interface to implement the flag. This approach makes it possible
for Python and GDB SIGINT handling to coexist seamlessly.
If GDB is built without Python, it instead uses its traditional
variables. */
/* Clear the quit flag. */
extern void clear_quit_flag (void);
/* Evaluate to non-zero if the quit flag is set, zero otherwise. This
will clear the quit flag as a side effect. */
extern int check_quit_flag (void);
/* Set the quit flag. */
extern void set_quit_flag (void);
extern int immediate_quit;
extern void quit (void);
@@ -184,7 +204,7 @@ extern void quit (void);
needed. */
#define QUIT { \
if (quit_flag) quit (); \
if (check_quit_flag ()) quit (); \
if (deprecated_interactive_hook) deprecated_interactive_hook (); \
}