aboutsummaryrefslogtreecommitdiff
path: root/gdb
diff options
context:
space:
mode:
authorTom Tromey <tromey@adacore.com>2022-12-12 10:17:18 -0700
committerTom Tromey <tromey@adacore.com>2022-12-13 12:51:53 -0700
commitd2f803afd5a3ae16933a3adb8dca9b16a01551ce (patch)
tree752288a27719431d1e4e22255af6b94e0aac551a /gdb
parent12bc5170ee9c498cd1a2be0e2dacbe5083ceb70e (diff)
downloadfsf-binutils-gdb-d2f803afd5a3ae16933a3adb8dca9b16a01551ce.zip
fsf-binutils-gdb-d2f803afd5a3ae16933a3adb8dca9b16a01551ce.tar.gz
fsf-binutils-gdb-d2f803afd5a3ae16933a3adb8dca9b16a01551ce.tar.bz2
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.
Diffstat (limited to 'gdb')
-rw-r--r--gdb/inflow.c12
1 files changed, 8 insertions, 4 deletions
diff --git a/gdb/inflow.c b/gdb/inflow.c
index 5477624..da2005a 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<sighandler_t> sigint_ours;
#ifdef SIGQUIT
-static sighandler_t sigquit_ours;
+static gdb::optional<sighandler_t> 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
}