From 81dc94c406361564d833d33fadd9188f542fb46d Mon Sep 17 00:00:00 2001 From: Pinguin1234 <18099221+Pinguin1234@users.noreply.github.com> Date: Sat, 4 Apr 2020 00:55:27 +0200 Subject: [PATCH 1/4] Added option to quit in SIGHUP --- src/core/core.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/core/core.c b/src/core/core.c index 878d9eb6..08d9cb6e 100644 --- a/src/core/core.c +++ b/src/core/core.c @@ -88,6 +88,11 @@ static void sig_reload_config(int signo) reload_config = TRUE; } +static void sig_quit_on_hup(int signo) +{ + signal_emit("gui exit", 0); +} + static void read_settings(void) { static int signals[] = { @@ -102,14 +107,16 @@ static void read_settings(void) const char *ignores; struct sigaction act; int n; + int quit_on_hup; ignores = settings_get_str("ignore_signals"); sigemptyset (&act.sa_mask); act.sa_flags = 0; - /* reload config on SIGHUP */ - act.sa_handler = sig_reload_config; + quit_on_hup = settings_get_bool("quit_on_hup"); + + act.sa_handler = quit_on_hup ? sig_quit_on_hup : sig_reload_config; sigaction(SIGHUP, &act, NULL); for (n = 0; n < sizeof(signals)/sizeof(signals[0]); n++) { @@ -267,6 +274,8 @@ void core_init(void) settings_add_str("misc", "ignore_signals", ""); settings_add_bool("misc", "override_coredump_limit", FALSE); + settings_add_bool("misc", "quit_on_hup", FALSE); + #ifdef HAVE_SYS_RESOURCE_H getrlimit(RLIMIT_CORE, &orig_core_rlimit); From cae37e37ca6b047411f86681255eca322cfd835a Mon Sep 17 00:00:00 2001 From: ailin-nemui Date: Sat, 4 Apr 2020 01:12:03 +0200 Subject: [PATCH 2/4] run git-clang-format --- src/core/core.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/core/core.c b/src/core/core.c index 08d9cb6e..5bb7f23e 100644 --- a/src/core/core.c +++ b/src/core/core.c @@ -90,7 +90,7 @@ static void sig_reload_config(int signo) static void sig_quit_on_hup(int signo) { - signal_emit("gui exit", 0); + signal_emit("gui exit", 0); } static void read_settings(void) @@ -115,8 +115,8 @@ static void read_settings(void) act.sa_flags = 0; quit_on_hup = settings_get_bool("quit_on_hup"); - - act.sa_handler = quit_on_hup ? sig_quit_on_hup : sig_reload_config; + + act.sa_handler = quit_on_hup ? sig_quit_on_hup : sig_reload_config; sigaction(SIGHUP, &act, NULL); for (n = 0; n < sizeof(signals)/sizeof(signals[0]); n++) { @@ -276,7 +276,6 @@ void core_init(void) settings_add_bool("misc", "override_coredump_limit", FALSE); settings_add_bool("misc", "quit_on_hup", FALSE); - #ifdef HAVE_SYS_RESOURCE_H getrlimit(RLIMIT_CORE, &orig_core_rlimit); #endif From f9595c03b1392aca8bd2aa2103f183ebedc8ec88 Mon Sep 17 00:00:00 2001 From: Dennis Pentmeier Date: Sat, 4 Apr 2020 17:59:46 +0200 Subject: [PATCH 3/4] Changed to async-signal safe method as suggested by dequis --- src/core/core.c | 16 ++++------------ src/core/core.h | 2 +- src/fe-text/irssi.c | 13 +++++++++---- 3 files changed, 14 insertions(+), 17 deletions(-) diff --git a/src/core/core.c b/src/core/core.c index 5bb7f23e..0446052b 100644 --- a/src/core/core.c +++ b/src/core/core.c @@ -66,7 +66,7 @@ void wcwidth_wrapper_deinit(void); int irssi_gui; int irssi_init_finished; -int reload_config; +int sighup_received; time_t client_start_time; static char *irssi_dir, *irssi_config_file; @@ -83,14 +83,9 @@ const char *get_irssi_config(void) return irssi_config_file; } -static void sig_reload_config(int signo) +static void sig_hup(int signo) { - reload_config = TRUE; -} - -static void sig_quit_on_hup(int signo) -{ - signal_emit("gui exit", 0); + sighup_received = TRUE; } static void read_settings(void) @@ -107,16 +102,13 @@ static void read_settings(void) const char *ignores; struct sigaction act; int n; - int quit_on_hup; ignores = settings_get_str("ignore_signals"); sigemptyset (&act.sa_mask); act.sa_flags = 0; - quit_on_hup = settings_get_bool("quit_on_hup"); - - act.sa_handler = quit_on_hup ? sig_quit_on_hup : sig_reload_config; + act.sa_handler = sig_hup; sigaction(SIGHUP, &act, NULL); for (n = 0; n < sizeof(signals)/sizeof(signals[0]); n++) { diff --git a/src/core/core.h b/src/core/core.h index 6c6c7b61..3c544753 100644 --- a/src/core/core.h +++ b/src/core/core.h @@ -13,7 +13,7 @@ extern int irssi_gui; extern int irssi_init_finished; /* TRUE after "irssi init finished" signal is sent */ -extern int reload_config; /* TRUE after received SIGHUP. */ +extern int sighup_received; /* TRUE after received SIGHUP. */ extern time_t client_start_time; void core_preinit(const char *path); diff --git a/src/fe-text/irssi.c b/src/fe-text/irssi.c index ca784bba..c3ded0b9 100644 --- a/src/fe-text/irssi.c +++ b/src/fe-text/irssi.c @@ -339,10 +339,15 @@ int main(int argc, char **argv) /* Does the same as g_main_run(main_loop), except we can call our dirty-checker after each iteration */ while (!quitting) { - if (reload_config) { - /* SIGHUP received, do /RELOAD */ - reload_config = FALSE; - signal_emit("command reload", 1, ""); + if (sighup_received) { + sighup_received = FALSE; + + if (settings_get_bool("quit_on_hup")) { + signal_emit("gui exit", 0); + } + else { + signal_emit("command reload", 1, ""); + } } dirty_check(); From 1bfe27c66e5b51ba9eadcc1928b3b6134ec3bb29 Mon Sep 17 00:00:00 2001 From: = <=> Date: Mon, 6 Apr 2020 17:04:35 +0200 Subject: [PATCH 4/4] Used Tabs instead of spaces and increased ABI_VERSION --- src/common.h | 2 +- src/core/core.c | 4 ++-- src/fe-text/irssi.c | 14 +++++++------- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/common.h b/src/common.h index d1f34870..e0da1080 100644 --- a/src/common.h +++ b/src/common.h @@ -6,7 +6,7 @@ #define IRSSI_GLOBAL_CONFIG "irssi.conf" /* config file name in /etc/ */ #define IRSSI_HOME_CONFIG "config" /* config file name in ~/.irssi/ */ -#define IRSSI_ABI_VERSION 25 +#define IRSSI_ABI_VERSION 26 #define DEFAULT_SERVER_ADD_PORT 6667 #define DEFAULT_SERVER_ADD_TLS_PORT 6697 diff --git a/src/core/core.c b/src/core/core.c index 0446052b..85f3a5d5 100644 --- a/src/core/core.c +++ b/src/core/core.c @@ -85,7 +85,7 @@ const char *get_irssi_config(void) static void sig_hup(int signo) { - sighup_received = TRUE; + sighup_received = TRUE; } static void read_settings(void) @@ -108,7 +108,7 @@ static void read_settings(void) sigemptyset (&act.sa_mask); act.sa_flags = 0; - act.sa_handler = sig_hup; + act.sa_handler = sig_hup; sigaction(SIGHUP, &act, NULL); for (n = 0; n < sizeof(signals)/sizeof(signals[0]); n++) { diff --git a/src/fe-text/irssi.c b/src/fe-text/irssi.c index c3ded0b9..c2013155 100644 --- a/src/fe-text/irssi.c +++ b/src/fe-text/irssi.c @@ -340,14 +340,14 @@ int main(int argc, char **argv) can call our dirty-checker after each iteration */ while (!quitting) { if (sighup_received) { - sighup_received = FALSE; + sighup_received = FALSE; - if (settings_get_bool("quit_on_hup")) { - signal_emit("gui exit", 0); - } - else { - signal_emit("command reload", 1, ""); - } + if (settings_get_bool("quit_on_hup")) { + signal_emit("gui exit", 0); + } + else { + signal_emit("command reload", 1, ""); + } } dirty_check();