[dm-devel] [RFC PATCH 5/6] multipathd: add code to handle blocked signals
Benjamin Marzinski
bmarzins at redhat.com
Wed Jan 16 23:59:28 UTC 2019
On Fri, Jan 04, 2019 at 06:59:13PM +0100, Martin Wilck wrote:
> multipathd blocks all signals except in the uxlsnr thread.
> Add some code to handle signals even while they're blocked.
>
> If a shutdown signal is received, deliver_pending_signals() returns
> TRUE. This is not the same as should_exit(), it's just a friendly
> warning to the caller that shutdown/thread cancellation is imminent.
>
> Signed-off-by: Martin Wilck <mwilck at suse.com>
> ---
> multipathd/main.c | 25 +++++++++++++++++++++++++
> multipathd/main.h | 1 +
> 2 files changed, 26 insertions(+)
>
> diff --git a/multipathd/main.c b/multipathd/main.c
> index 569a27ac..6276d34c 100644
> --- a/multipathd/main.c
> +++ b/multipathd/main.c
> @@ -2614,6 +2614,31 @@ signal_init(void)
> signal_set(SIGPIPE, sigend);
> }
>
> +bool deliver_pending_signals(void)
> +{
> + sigset_t set;
> + bool ret = exit_sig;
> +
> + if (sigpending(&set) != 0)
> + return false;
shouldn't this return ret instead of false?
-Ben
> +
> + if (sigismember(&set, SIGTERM) ||
> + sigismember(&set, SIGPIPE) ||
> + sigismember(&set, SIGINT)) {
> + sigend(SIGTERM);
> + ret = true;
> + }
> + if (sigismember(&set, SIGHUP))
> + sighup(SIGHUP);
> + if (sigismember(&set, SIGUSR1))
> + sigusr1(SIGUSR1);
> + if (sigismember(&set, SIGUSR2))
> + sigusr2(SIGUSR2);
> +
> + handle_signals(false);
> + return ret;
> +}
> +
> static void
> setscheduler (void)
> {
> diff --git a/multipathd/main.h b/multipathd/main.h
> index 8fd426b0..2b77b44b 100644
> --- a/multipathd/main.h
> +++ b/multipathd/main.h
> @@ -39,6 +39,7 @@ void * mpath_pr_event_handler_fn (void * );
> int update_map_pr(struct multipath *mpp);
> void * mpath_pr_event_handler_fn (void * pathp );
> void handle_signals(bool);
> +bool deliver_pending_signals(void);
> int __setup_multipath (struct vectors * vecs, struct multipath * mpp,
> int reset);
> #define setup_multipath(vecs, mpp) __setup_multipath(vecs, mpp, 1)
> --
> 2.19.2
More information about the dm-devel
mailing list