From d8238da8c69cde5e656f3a7376fd1810cb5e39f3 Mon Sep 17 00:00:00 2001 From: nick black Date: Sun, 16 May 2021 21:43:42 -0400 Subject: [PATCH] if we aren't setting signal handlers, don't try to take ownership of signal atomic #1666 --- src/lib/signal.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/lib/signal.c b/src/lib/signal.c index ad076c1f1..6b5979fc4 100644 --- a/src/lib/signal.c +++ b/src/lib/signal.c @@ -67,7 +67,7 @@ int drop_signals(void* nc){ } pthread_mutex_unlock(&lock); if(ret){ - fprintf(stderr, "Couldn't drop signals with %p (had %p)\n", nc, expected); + fprintf(stderr, "Signals weren't registered for %p (had %p)\n", nc, expected); } return ret; } @@ -105,10 +105,13 @@ int setup_signals(void* vnc, bool no_quit_sigs, bool no_winch_sig, notcurses* nc = vnc; void* expected = NULL; struct sigaction sa; - // we expect NULL (nothing registered), and want to register nc - if(!atomic_compare_exchange_strong(&signal_nc, &expected, nc)){ - loginfo(nc, "%p is already registered for signals (provided %p)\n", expected, nc); - return -1; + // don't register ourselves if we don't intend to set up signal handlers + if(!no_winch_sig || !no_quit_sigs){ + // we expect NULL (nothing registered), and want to register nc + if(!atomic_compare_exchange_strong(&signal_nc, &expected, nc)){ + loginfo(nc, "%p is already registered for signals (provided %p)\n", expected, nc); + return -1; + } } if(!no_winch_sig){ memset(&sa, 0, sizeof(sa));