Re: [hackers] [slstatus][PATCH] Handle SIGUSR1 for forced refreshes

From: Hiltjo Posthuma <hiltjo_AT_codemadness.org>
Date: Tue, 14 Jul 2020 15:42:58 +0200

On Tue, Jul 14, 2020 at 02:45:14PM +0200, Mart Lubbers wrote:
> Dear all,
> I've submitted this patch before but maybe I did something wrong (it was before
> the confirmation mail of the subscription). If there is anything else off with
> this email/patch, please let me know.
> Best,
>
> Original email:
>
> At some point one might want to force a refresh for example after
> checking email or changing the volume. Sending a SIGUSR1 achieves this
> now
>
> ---
> slstatus.c | 6 +++---
> 1 file changed, 3 insertions(+), 3 deletions(-)
>
> diff --git a/slstatus.c b/slstatus.c
> index 96fa5b6..499cd30 100644
> --- a/slstatus.c
> +++ b/slstatus.c
> _AT_@ -26,9 +26,8 @@ static Display *dpy;
> static void
> terminate(const int signo)
> {
> - (void)signo;
> -
> - done = 1;
> + if (signo != SIGUSR1)
> + done = 1;
> }
>
> static void
> _AT_@ -72,6 +71,7 @@ main(int argc, char *argv[])
> act.sa_handler = terminate;
> sigaction(SIGINT, &act, NULL);
> sigaction(SIGTERM, &act, NULL);
> + sigaction(SIGUSR1, &act, NULL);
>
> if (!sflag && !(dpy = XOpenDisplay(NULL))) {
> die("XOpenDisplay: Failed to open display");
> --
> 2.20.1

Hi,

It sounds useful to me. Handling SIGUSR1 probably increases the change of some
race-condition though (SIGINT and SIGTERM ends the program so it doesn't matter
much). Maybe setting sigaction.sa_flags to SA_RESTART helps a bit to atleast
avoid EINTR in some calls (like stdio file write/reads)?

And a nitpick (probably does not matter in practise) but maybe done should be
of the type volatile sig_atomic_t?

-- 
Kind regards,
Hiltjo

Received on Tue Jul 14 2020 - 15:42:58 CEST

This archive was generated by hypermail 2.3.0 : Tue Jul 14 2020 - 15:48:34 CEST