From 40659c0bb0602d4f2268bad6d2579d86e1b62289 Mon Sep 17 00:00:00 2001 From: Andre Noll Date: Fri, 3 Jan 2014 19:03:22 +0000 Subject: [PATCH] gui: Move signal handling code out of do_select(). As a further preparation for employing the standard paraslash scheduler within para_gui, this simple patch introduces signal_pre_select() and renames handle_signal() to signal_post_select(). The signal related part of do_select() is moved to these two functions so that do_select() is reduced to the bare minimum: one call to each of the two new functions. --- gui.c | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/gui.c b/gui.c index ae585b8b..70981e89 100644 --- a/gui.c +++ b/gui.c @@ -916,9 +916,12 @@ static void reread_conf(void) /* * React to various signal-related events */ -static void handle_signal(int sig) +static void signal_post_select(fd_set *rfds) { - switch (sig) { + int ret = para_next_signal(rfds); + if (ret <= 0) + return; + switch (ret) { case SIGTERM: die(EXIT_FAILURE, "only the good die young (caught SIGTERM)\n"); return; @@ -1063,6 +1066,11 @@ static int input_post_select(int mode) } } +static void signal_pre_select(fd_set *rfds, int *max_fileno) +{ + para_fd_set(signal_pipe, rfds, max_fileno); +} + /* * This is the core select loop. Besides the (internal) signal * pipe, the following other fds are checked according to the mode: @@ -1089,17 +1097,13 @@ repeat: FD_ZERO(&rfds); max_fileno = 0; status_pre_select(&rfds, &max_fileno, &tv); - /* signal pipe */ - para_fd_set(signal_pipe, &rfds, &max_fileno); + signal_pre_select(&rfds, &max_fileno); command_pre_select(mode, &rfds, &max_fileno); input_pre_select(mode, &rfds, &max_fileno); ret = para_select(max_fileno + 1, &rfds, NULL, &tv); if (ret <= 0) goto check_return; /* skip fd checks */ - /* signals */ - ret = para_next_signal(&rfds); - if (ret > 0) - handle_signal(ret); + signal_post_select(&rfds); /* read command pipe if ready */ ret = command_post_select(mode, &rfds); if (ret < 0) -- 2.30.2