From 0569a47ef78346c1f79506ac1c0d0782febe42cf Mon Sep 17 00:00:00 2001 From: Manuel Stoeckl Date: Sat, 7 Oct 2023 13:01:22 -0400 Subject: [PATCH] Configure SIGUSR1 with sigaction() instead of signal() If signal() is used to set a signal handler, only the first signal received will use the handler; any later signals use the default behavior (making swaylock terminate immediately, without unlocking). Using sigaction() ensures that the handler will be used every time. --- main.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/main.c b/main.c index 7d5f3bb..71c4c97 100644 --- a/main.c +++ b/main.c @@ -1269,7 +1269,12 @@ int main(int argc, char **argv) { loop_add_fd(state.eventloop, get_comm_reply_fd(), POLLIN, comm_in, NULL); loop_add_fd(state.eventloop, sigusr_fds[0], POLLIN, term_in, NULL); - signal(SIGUSR1, do_sigusr); + + struct sigaction sa; + sa.sa_handler = do_sigusr; + sigemptyset(&sa.sa_mask); + sa.sa_flags = SA_RESTART; + sigaction(SIGUSR1, &sa, NULL); state.run_display = true; while (state.run_display) {