main: moved the save_state timer to state_file.c
The state_file library should manage its own regular saves.
This commit is contained in:
parent
84de45afba
commit
0dd2dfff9d
18
src/main.c
18
src/main.c
@ -165,14 +165,6 @@ initialize_decoder_and_player(void)
|
||||
dc_init();
|
||||
}
|
||||
|
||||
static gboolean
|
||||
timer_save_state_file(G_GNUC_UNUSED gpointer data)
|
||||
{
|
||||
g_debug("Saving state file");
|
||||
write_state_file();
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* event_pipe callback function for PIPE_EVENT_IDLE
|
||||
*/
|
||||
@ -190,8 +182,6 @@ int main(int argc, char *argv[])
|
||||
{
|
||||
Options options;
|
||||
clock_t start;
|
||||
GTimer *save_state_timer;
|
||||
guint save_state_source_id;
|
||||
|
||||
daemonize_close_stdin();
|
||||
|
||||
@ -265,11 +255,6 @@ int main(int argc, char *argv[])
|
||||
|
||||
state_file_init(config_get_path(CONF_STATE_FILE));
|
||||
|
||||
save_state_timer = g_timer_new();
|
||||
|
||||
save_state_source_id = g_timeout_add(5 * 60 * 1000,
|
||||
timer_save_state_file, NULL);
|
||||
|
||||
/* run the main loop */
|
||||
|
||||
g_main_loop_run(main_loop);
|
||||
@ -278,9 +263,6 @@ int main(int argc, char *argv[])
|
||||
|
||||
g_main_loop_unref(main_loop);
|
||||
|
||||
g_source_remove(save_state_source_id);
|
||||
g_timer_destroy(save_state_timer);
|
||||
|
||||
state_file_finish();
|
||||
playerKill();
|
||||
finishZeroconf();
|
||||
|
@ -22,6 +22,7 @@
|
||||
#include "volume.h"
|
||||
|
||||
#include <glib.h>
|
||||
#include <assert.h>
|
||||
#include <string.h>
|
||||
#include <errno.h>
|
||||
|
||||
@ -39,7 +40,11 @@ static struct _sf_cb {
|
||||
|
||||
static char *state_file_path;
|
||||
|
||||
void write_state_file(void)
|
||||
/** the GLib source id for the save timer */
|
||||
static guint save_state_source_id;
|
||||
|
||||
static void
|
||||
state_file_write(void)
|
||||
{
|
||||
unsigned int i;
|
||||
FILE *fp;
|
||||
@ -68,6 +73,8 @@ state_file_read(void)
|
||||
|
||||
assert(state_file_path != NULL);
|
||||
|
||||
g_debug("Saving state file");
|
||||
|
||||
fp = fopen(state_file_path, "r");
|
||||
if (G_UNLIKELY(!fp)) {
|
||||
g_warning("failed to open %s: %s",
|
||||
@ -82,6 +89,17 @@ state_file_read(void)
|
||||
while(fclose(fp) && errno == EINTR) /* nothing */;
|
||||
}
|
||||
|
||||
/**
|
||||
* This function is called every 5 minutes by the GLib main loop, and
|
||||
* saves the state file.
|
||||
*/
|
||||
static gboolean
|
||||
timer_save_state_file(G_GNUC_UNUSED gpointer data)
|
||||
{
|
||||
state_file_write();
|
||||
return true;
|
||||
}
|
||||
|
||||
void
|
||||
state_file_init(const char *path)
|
||||
{
|
||||
@ -92,13 +110,19 @@ state_file_init(const char *path)
|
||||
|
||||
state_file_path = g_strdup(path);
|
||||
state_file_read();
|
||||
|
||||
save_state_source_id = g_timeout_add(5 * 60 * 1000,
|
||||
timer_save_state_file, NULL);
|
||||
}
|
||||
|
||||
void
|
||||
state_file_finish(void)
|
||||
{
|
||||
if (save_state_source_id != 0)
|
||||
g_source_remove(save_state_source_id);
|
||||
|
||||
if (state_file_path != NULL)
|
||||
write_state_file();
|
||||
state_file_write();
|
||||
|
||||
g_free(state_file_path);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user