Fix SIGTERM signal safety (PR gdb/15358).

gdb/
2014-03-18  Jan Kratochvil  <jan.kratochvil@redhat.com>

	PR gdb/15358
	* defs.h (sync_quit_force_run): New declaration.
	(QUIT): Check also SYNC_QUIT_FORCE_RUN.
	* event-top.c (async_sigterm_handler): New declaration.
	(async_sigterm_token): New variable.
	(async_init_signals): Create also async_sigterm_token.
	(async_sigterm_handler): New function.
	(sync_quit_force_run): New variable.
	(handle_sigterm): Replace quit_force call by other calls.
	* utils.c (quit): Call quit_force if SYNC_QUIT_FORCE_RUN.

gdb/testsuite/
2014-03-18  Jan Kratochvil  <jan.kratochvil@redhat.com>

	PR gdb/15358
	* gdb.base/gdb-sigterm.c: New file.
	* gdb.base/gdb-sigterm.exp: New file.

Message-ID: <20140316135334.GA30698@host2.jankratochvil.net>
This commit is contained in:
Jan Kratochvil
2014-03-18 22:48:06 +01:00
parent dea80df099
commit 06c868a8dc
7 changed files with 176 additions and 3 deletions

View File

@@ -171,6 +171,9 @@ extern int check_quit_flag (void);
/* * Set the quit flag. */
extern void set_quit_flag (void);
/* Flag that function quit should call quit_force. */
extern volatile int sync_quit_force_run;
extern int immediate_quit;
extern void quit (void);
@@ -183,7 +186,7 @@ extern void quit (void);
needed. */
#define QUIT { \
if (check_quit_flag ()) quit (); \
if (check_quit_flag () || sync_quit_force_run) quit (); \
if (deprecated_interactive_hook) deprecated_interactive_hook (); \
}