From d2f803afd5a3ae16933a3adb8dca9b16a01551ce Mon Sep 17 00:00:00 2001 From: Tom Tromey Date: Mon, 12 Dec 2022 10:17:18 -0700 Subject: [PATCH] Use gdb::optional for sigint_ours sigint_ours (and sigquit_ours) can be used without being set. Avoid this problem by changing them to gdb::optional and checking that they are in fact set before using the value. --- gdb/inflow.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/gdb/inflow.c b/gdb/inflow.c index 5477624bcd5..da2005a9318 100644 --- a/gdb/inflow.c +++ b/gdb/inflow.c @@ -113,9 +113,9 @@ static struct terminal_info *get_inflow_inferior_data (struct inferior *); we save our handlers in these two variables and set SIGINT and SIGQUIT to SIG_IGN. */ -static sighandler_t sigint_ours; +static gdb::optional sigint_ours; #ifdef SIGQUIT -static sighandler_t sigquit_ours; +static gdb::optional sigquit_ours; #endif /* The name of the tty (from the `tty' command) that we're giving to @@ -501,9 +501,13 @@ child_terminal_ours_1 (target_terminal_state desired_state) if (!job_control && desired_state == target_terminal_state::is_ours) { - signal (SIGINT, sigint_ours); + if (sigint_ours.has_value ()) + signal (SIGINT, *sigint_ours); + sigint_ours.reset (); #ifdef SIGQUIT - signal (SIGQUIT, sigquit_ours); + if (sigquit_ours.has_value ()) + signal (SIGQUIT, *sigquit_ours); + sigquit_ours.reset (); #endif } -- 2.30.2