diff options
author | Přemysl Eric Janouch <p@janouch.name> | 2020-11-01 15:32:39 +0100 |
---|---|---|
committer | Přemysl Eric Janouch <p@janouch.name> | 2020-11-01 15:33:16 +0100 |
commit | d05c85833d09e9b7da6c264c2ae66b30d0d6c882 (patch) | |
tree | 090151a2154a8abfe279018245f0c184cb975f72 /degesch.c | |
parent | 2336340ad85be662d7b23118fd7c6d216413c757 (diff) | |
download | xK-d05c85833d09e9b7da6c264c2ae66b30d0d6c882.tar.gz xK-d05c85833d09e9b7da6c264c2ae66b30d0d6c882.tar.xz xK-d05c85833d09e9b7da6c264c2ae66b30d0d6c882.zip |
degesch: make a second SIGINT force-quit
Also fixed the possibility of eating a sequence of signals
as we reset the indicators /after/ we took action,
which creates a time window for races.
Diffstat (limited to 'degesch.c')
-rw-r--r-- | degesch.c | 25 |
1 files changed, 15 insertions, 10 deletions
@@ -5021,14 +5021,17 @@ irc_initiate_disconnect (struct server *s, const char *reason) } static void -initiate_quit (struct app_context *ctx, const char *message) +request_quit (struct app_context *ctx, const char *message) { - log_global_status (ctx, "Shutting down"); + if (!ctx->quitting) + { + log_global_status (ctx, "Shutting down"); + ctx->quitting = true; - // Hide the user interface - CALL (ctx->input, hide); + // Disable the user interface + CALL (ctx->input, hide); + } - // Initiate a connection close struct str_map_iter iter = str_map_iter_make (&ctx->servers); struct server *s; while ((s = str_map_iter_next (&iter))) @@ -5042,7 +5045,6 @@ initiate_quit (struct app_context *ctx, const char *message) irc_destroy_connector (s); } - ctx->quitting = true; try_finish_quit (ctx); } @@ -11280,7 +11282,7 @@ handle_command_me (struct handler_args *a) static bool handle_command_quit (struct handler_args *a) { - initiate_quit (a->ctx, *a->arguments ? a->arguments : NULL); + request_quit (a->ctx, *a->arguments ? a->arguments : NULL); return true; } @@ -13722,12 +13724,15 @@ on_signal_pipe_readable (const struct pollfd *fd, struct app_context *ctx) while (try_reap_child (ctx)) ; - if (g_termination_requested && !ctx->quitting) - initiate_quit (ctx, NULL); + if (g_termination_requested) + { + g_termination_requested = false; + request_quit (ctx, NULL); + } if (g_winch_received) { - redraw_screen (ctx); g_winch_received = false; + redraw_screen (ctx); } } |