1
0
mirror of https://github.com/irssi/irssi.git synced 2024-09-29 04:45:57 -04:00

Changed to async-signal safe method as suggested by dequis

This commit is contained in:
Dennis Pentmeier 2020-04-04 17:59:46 +02:00
parent cae37e37ca
commit f9595c03b1
3 changed files with 14 additions and 17 deletions

View File

@ -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++) {

View File

@ -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);

View File

@ -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();