Fix: signal handlers don't work

This commit is contained in:
Nikita Ivanov 2022-06-01 00:14:00 +05:00
parent a1d9f8d5d9
commit 6690c5048d
No known key found for this signature in database
GPG Key ID: 6E656AC5B97B5133

View File

@ -15,6 +15,8 @@
static pid_t ueberzug_pid; static pid_t ueberzug_pid;
static volatile int do_exit = 0;
static void kill_ueberzug(void) static void kill_ueberzug(void)
{ {
if (kill(ueberzug_pid, SIGTERM) == -1) { if (kill(ueberzug_pid, SIGTERM) == -1) {
@ -27,9 +29,9 @@ static void kill_ueberzug(void)
spawn_wait(ueberzug_pid, NULL); spawn_wait(ueberzug_pid, NULL);
} }
static void do_nothing(int s) static void sig_handler_exit(int s)
{ {
/* Do nothing */ do_exit = 1;
} }
static int register_signal(int sig, __sighandler_t handler) static int register_signal(int sig, __sighandler_t handler)
@ -47,8 +49,8 @@ static int listen(int fifo_fd)
* poll() returns 0, which will break the loop and a normal * poll() returns 0, which will break the loop and a normal
* exit will happen. * exit will happen.
*/ */
ERRCHK_GOTO_OK(register_signal(SIGINT, do_nothing), ret, exit); ERRCHK_GOTO_OK(register_signal(SIGINT, sig_handler_exit), ret, exit);
ERRCHK_GOTO_OK(register_signal(SIGTERM, do_nothing), ret, exit); ERRCHK_GOTO_OK(register_signal(SIGTERM, sig_handler_exit), ret, exit);
int pipe_fds[2]; int pipe_fds[2];
ERRCHK_GOTO(pipe(pipe_fds) == -1, ret, signal, FUNCFAILED("pipe"), ERRNOS); ERRCHK_GOTO(pipe(pipe_fds) == -1, ret, signal, FUNCFAILED("pipe"), ERRNOS);
@ -71,7 +73,13 @@ static int listen(int fifo_fd)
* instance. * instance.
*/ */
int poll_ret, len; int poll_ret, len;
while ((poll_ret = poll(&pollfd, 1, -1) > 0)) { while ((poll_ret = poll(&pollfd, 1, 100) >= 0)) {
if (do_exit)
goto close;
if (poll_ret == 0)
continue;
static char buf[1024]; static char buf[1024];
while ((len = read(fifo_fd, buf, LEN(buf))) > 0) { while ((len = read(fifo_fd, buf, LEN(buf))) > 0) {
/* But first byte equal to 0 means "exit" */ /* But first byte equal to 0 means "exit" */