From 9b6e15406bd83a722cb07ed37709d94308d9e22e Mon Sep 17 00:00:00 2001 From: Nikolaus Rath Date: Wed, 24 May 2017 15:56:41 -0700 Subject: fuse_signals.c: use new do_nothing function instead of SIG_IGN Fixes: #160. --- lib/fuse_signals.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) (limited to 'lib') diff --git a/lib/fuse_signals.c b/lib/fuse_signals.c index a1bf1d5..db059e1 100644 --- a/lib/fuse_signals.c +++ b/lib/fuse_signals.c @@ -32,6 +32,11 @@ static void exit_handler(int sig) } } +static void do_nothing(int sig) +{ + (void) sig; +} + static int set_one_signal_handler(int sig, void (*handler)(int), int remove) { struct sigaction sa; @@ -57,10 +62,15 @@ static int set_one_signal_handler(int sig, void (*handler)(int), int remove) int fuse_set_signal_handlers(struct fuse_session *se) { + /* If we used SIG_IGN instead of the do_nothing function, + then we would be unable to tell if we set SIG_IGN (and + thus should reset to SIG_DFL in fuse_remove_signal_handlers) + or if it was already set to SIG_IGN (and should be left + untouched. */ if (set_one_signal_handler(SIGHUP, exit_handler, 0) == -1 || set_one_signal_handler(SIGINT, exit_handler, 0) == -1 || set_one_signal_handler(SIGTERM, exit_handler, 0) == -1 || - set_one_signal_handler(SIGPIPE, SIG_IGN, 0) == -1) + set_one_signal_handler(SIGPIPE, do_nothing, 0) == -1) return -1; fuse_instance = se; @@ -78,5 +88,5 @@ void fuse_remove_signal_handlers(struct fuse_session *se) set_one_signal_handler(SIGHUP, exit_handler, 1); set_one_signal_handler(SIGINT, exit_handler, 1); set_one_signal_handler(SIGTERM, exit_handler, 1); - set_one_signal_handler(SIGPIPE, SIG_IGN, 1); + set_one_signal_handler(SIGPIPE, do_nothing, 1); } -- cgit v1.2.3