diff --git a/main.c b/main.c index 7d5f3bb5..d27cddfa 100644 --- a/main.c +++ b/main.c @@ -1188,7 +1188,11 @@ int main(int argc, char **argv) { if (pipe(sigusr_fds) != 0) { swaylock_log(LOG_ERROR, "Failed to pipe"); - return 1; + return EXIT_FAILURE; + } + if (fcntl(sigusr_fds[1], F_SETFL, O_NONBLOCK) == -1) { + swaylock_log(LOG_ERROR, "Failed to make pipe end nonblocking"); + return EXIT_FAILURE; } wl_list_init(&state.surfaces); @@ -1269,7 +1273,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) {