diff --git a/src/core/settings.c b/src/core/settings.c index 7ded9ae2..b13163e0 100644 --- a/src/core/settings.c +++ b/src/core/settings.c @@ -605,13 +605,13 @@ int settings_save(const char *fname, int autosave) return !error; } -static void sig_autosave(void) +static int sig_autosave(void) { char *fname, *str; if (!settings_get_bool("settings_autosave") || config_last_modifycounter == mainconfig->modifycounter) - return; + return 1; if (!irssi_config_is_changed(NULL)) settings_save(NULL, TRUE); @@ -628,6 +628,8 @@ static void sig_autosave(void) settings_save(fname, TRUE); g_free(fname); } + + return 1; } void settings_init(void) diff --git a/src/core/write-buffer.c b/src/core/write-buffer.c index 762fc24e..1c3eef82 100644 --- a/src/core/write-buffer.c +++ b/src/core/write-buffer.c @@ -126,13 +126,16 @@ void write_buffer_flush(void) block_count = 0; } +static int flush_timeout(void) +{ + write_buffer_flush(); + return 1; +} + static void read_settings(void) { int msecs; - if (timeout_tag != -1) - g_source_remove(timeout_tag); - write_buffer_flush(); write_buffer_max_blocks = settings_get_int("write_buffer_kb") * @@ -140,9 +143,14 @@ static void read_settings(void) if (settings_get_int("write_buffer_mins") > 0) { msecs = settings_get_int("write_buffer_mins")*60*1000; - timeout_tag = g_timeout_add(msecs, - (GSourceFunc) write_buffer_flush, - NULL); + if (timeout_tag == -1) { + timeout_tag = g_timeout_add(msecs, + (GSourceFunc) flush_timeout, + NULL); + } + } else if (timeout_tag != -1) { + g_source_remove(timeout_tag); + timeout_tag = -1; } }