From 91cecf5d3b32af133f7457eabb73fedc59bb2b39 Mon Sep 17 00:00:00 2001 From: giladogit <32686842+giladogit@users.noreply.github.com> Date: Fri, 6 Jul 2018 17:15:37 -0700 Subject: Update signals.h See issue #405 --- src/signals.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/signals.h b/src/signals.h index 526285d..090ab0b 100644 --- a/src/signals.h +++ b/src/signals.h @@ -27,5 +27,5 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. #define SIGNALS_H void setup_signal_handlers(); - +extern int sig_exit; #endif -- cgit v1.2.3 From 9bde3a460a24ae63fcd7bf68612ba0fc683786c6 Mon Sep 17 00:00:00 2001 From: giladogit <32686842+giladogit@users.noreply.github.com> Date: Fri, 6 Jul 2018 17:19:13 -0700 Subject: Update signals.c See issue #405 --- src/signals.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/signals.c b/src/signals.c index c08d5df..97192fa 100644 --- a/src/signals.c +++ b/src/signals.c @@ -33,6 +33,7 @@ void setup_signal_handlers() { struct sigaction feh_sh; sigset_t feh_ss; + sig_exit = 0; if ( (sigemptyset(&feh_ss) == -1) || (sigaddset(&feh_ss, SIGUSR1) == -1) || @@ -86,7 +87,7 @@ void feh_handle_signal(int signo) case SIGQUIT: if (childpid) killpg(childpid, SIGINT); - exit(128 + signo); + sig_exit = 128 + signo; } winwid = winwidget_get_first_window_of_type(WIN_TYPE_SLIDESHOW); -- cgit v1.2.3 From 6bc51aa57a2898817aeb92e616f221adf6881ab1 Mon Sep 17 00:00:00 2001 From: giladogit <32686842+giladogit@users.noreply.github.com> Date: Fri, 6 Jul 2018 17:21:03 -0700 Subject: Update main.c See issue #405 --- src/main.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main.c b/src/main.c index f1fca24..99397fd 100644 --- a/src/main.c +++ b/src/main.c @@ -87,7 +87,7 @@ int main(int argc, char **argv) /* main event loop */ while (feh_main_iteration(1)); - return(0); + return(sig_exit); } /* Return 0 to stop iterating, 1 if ok to continue. */ @@ -104,7 +104,7 @@ int feh_main_iteration(int block) double t1 = 0.0, t2 = 0.0; fehtimer ft; - if (window_num == 0) + if (window_num == 0 || sig_exit != 0) return(0); if (first) { @@ -137,7 +137,7 @@ int feh_main_iteration(int block) if (ev_handler[ev.type]) (*(ev_handler[ev.type])) (&ev); - if (window_num == 0) + if (window_num == 0 || sig_exit != 0) return(0); } XFlush(disp); @@ -208,7 +208,7 @@ int feh_main_iteration(int block) feh_event_handle_stdin(); } } - if (window_num == 0) + if (window_num == 0 || sig_exit != 0) return(0); return(1); -- cgit v1.2.3 From 00d45a4d00f45ed378ec5b1f5ae002ca918e58be Mon Sep 17 00:00:00 2001 From: giladogit <32686842+giladogit@users.noreply.github.com> Date: Sat, 7 Jul 2018 11:03:07 -0700 Subject: Update signals.c --- src/signals.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/signals.c b/src/signals.c index 97192fa..262423b 100644 --- a/src/signals.c +++ b/src/signals.c @@ -28,6 +28,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. #include "options.h" void feh_handle_signal(int); +int sig_exit; void setup_signal_handlers() { -- cgit v1.2.3 From 171ebcfe02f87212fd8d2080bcc6217e5962955b Mon Sep 17 00:00:00 2001 From: Daniel Friesel Date: Tue, 17 Jul 2018 17:29:35 +0200 Subject: signals.c: Globally initialize sig_exit; return immediately after SIGTERM etc --- src/signals.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/signals.c b/src/signals.c index 262423b..aeaf889 100644 --- a/src/signals.c +++ b/src/signals.c @@ -28,13 +28,12 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. #include "options.h" void feh_handle_signal(int); -int sig_exit; +int sig_exit = 0; void setup_signal_handlers() { struct sigaction feh_sh; sigset_t feh_ss; - sig_exit = 0; if ( (sigemptyset(&feh_ss) == -1) || (sigaddset(&feh_ss, SIGUSR1) == -1) || @@ -89,6 +88,7 @@ void feh_handle_signal(int signo) if (childpid) killpg(childpid, SIGINT); sig_exit = 128 + signo; + return; } winwid = winwidget_get_first_window_of_type(WIN_TYPE_SLIDESHOW); -- cgit v1.2.3 From f428edbd1945e9464896fa65c795563ca346d47f Mon Sep 17 00:00:00 2001 From: Daniel Friesel Date: Tue, 17 Jul 2018 17:30:11 +0200 Subject: feh_main_iteration: Properly check select() return value Trying to handle stdin when select() in fact returned an error due to being interrupted by a signal is a rather bad idea. --- src/main.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main.c b/src/main.c index 99397fd..1a76e2d 100644 --- a/src/main.c +++ b/src/main.c @@ -191,7 +191,7 @@ int feh_main_iteration(int block) in that */ feh_handle_timer(); } - else if (count && (FD_ISSET(0, &fdset))) + else if ((count > 0) && (FD_ISSET(0, &fdset))) feh_event_handle_stdin(); } } else { @@ -204,7 +204,7 @@ int feh_main_iteration(int block) && ((errno == ENOMEM) || (errno == EINVAL) || (errno == EBADF))) eprintf("Connection to X display lost"); - else if (count && (FD_ISSET(0, &fdset))) + else if ((count > 0) && (FD_ISSET(0, &fdset))) feh_event_handle_stdin(); } } -- cgit v1.2.3