forked from PsychoticNinja/irssi
Changed to async-signal safe method as suggested by dequis
This commit is contained in:
parent
cae37e37ca
commit
f9595c03b1
@ -66,7 +66,7 @@ void wcwidth_wrapper_deinit(void);
|
|||||||
|
|
||||||
int irssi_gui;
|
int irssi_gui;
|
||||||
int irssi_init_finished;
|
int irssi_init_finished;
|
||||||
int reload_config;
|
int sighup_received;
|
||||||
time_t client_start_time;
|
time_t client_start_time;
|
||||||
|
|
||||||
static char *irssi_dir, *irssi_config_file;
|
static char *irssi_dir, *irssi_config_file;
|
||||||
@ -83,14 +83,9 @@ const char *get_irssi_config(void)
|
|||||||
return irssi_config_file;
|
return irssi_config_file;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void sig_reload_config(int signo)
|
static void sig_hup(int signo)
|
||||||
{
|
{
|
||||||
reload_config = TRUE;
|
sighup_received = TRUE;
|
||||||
}
|
|
||||||
|
|
||||||
static void sig_quit_on_hup(int signo)
|
|
||||||
{
|
|
||||||
signal_emit("gui exit", 0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void read_settings(void)
|
static void read_settings(void)
|
||||||
@ -107,16 +102,13 @@ static void read_settings(void)
|
|||||||
const char *ignores;
|
const char *ignores;
|
||||||
struct sigaction act;
|
struct sigaction act;
|
||||||
int n;
|
int n;
|
||||||
int quit_on_hup;
|
|
||||||
|
|
||||||
ignores = settings_get_str("ignore_signals");
|
ignores = settings_get_str("ignore_signals");
|
||||||
|
|
||||||
sigemptyset (&act.sa_mask);
|
sigemptyset (&act.sa_mask);
|
||||||
act.sa_flags = 0;
|
act.sa_flags = 0;
|
||||||
|
|
||||||
quit_on_hup = settings_get_bool("quit_on_hup");
|
act.sa_handler = sig_hup;
|
||||||
|
|
||||||
act.sa_handler = quit_on_hup ? sig_quit_on_hup : sig_reload_config;
|
|
||||||
sigaction(SIGHUP, &act, NULL);
|
sigaction(SIGHUP, &act, NULL);
|
||||||
|
|
||||||
for (n = 0; n < sizeof(signals)/sizeof(signals[0]); n++) {
|
for (n = 0; n < sizeof(signals)/sizeof(signals[0]); n++) {
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
|
|
||||||
extern int irssi_gui;
|
extern int irssi_gui;
|
||||||
extern int irssi_init_finished; /* TRUE after "irssi init finished" signal is sent */
|
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;
|
extern time_t client_start_time;
|
||||||
|
|
||||||
void core_preinit(const char *path);
|
void core_preinit(const char *path);
|
||||||
|
@ -339,10 +339,15 @@ int main(int argc, char **argv)
|
|||||||
/* Does the same as g_main_run(main_loop), except we
|
/* Does the same as g_main_run(main_loop), except we
|
||||||
can call our dirty-checker after each iteration */
|
can call our dirty-checker after each iteration */
|
||||||
while (!quitting) {
|
while (!quitting) {
|
||||||
if (reload_config) {
|
if (sighup_received) {
|
||||||
/* SIGHUP received, do /RELOAD */
|
sighup_received = FALSE;
|
||||||
reload_config = FALSE;
|
|
||||||
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();
|
dirty_check();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user