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();
|
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
|
* event_pipe callback function for PIPE_EVENT_IDLE
|
||||||
*/
|
*/
|
||||||
@ -190,8 +182,6 @@ int main(int argc, char *argv[])
|
|||||||
{
|
{
|
||||||
Options options;
|
Options options;
|
||||||
clock_t start;
|
clock_t start;
|
||||||
GTimer *save_state_timer;
|
|
||||||
guint save_state_source_id;
|
|
||||||
|
|
||||||
daemonize_close_stdin();
|
daemonize_close_stdin();
|
||||||
|
|
||||||
@ -265,11 +255,6 @@ int main(int argc, char *argv[])
|
|||||||
|
|
||||||
state_file_init(config_get_path(CONF_STATE_FILE));
|
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 */
|
/* run the main loop */
|
||||||
|
|
||||||
g_main_loop_run(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_main_loop_unref(main_loop);
|
||||||
|
|
||||||
g_source_remove(save_state_source_id);
|
|
||||||
g_timer_destroy(save_state_timer);
|
|
||||||
|
|
||||||
state_file_finish();
|
state_file_finish();
|
||||||
playerKill();
|
playerKill();
|
||||||
finishZeroconf();
|
finishZeroconf();
|
||||||
|
@ -22,6 +22,7 @@
|
|||||||
#include "volume.h"
|
#include "volume.h"
|
||||||
|
|
||||||
#include <glib.h>
|
#include <glib.h>
|
||||||
|
#include <assert.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
|
|
||||||
@ -39,7 +40,11 @@ static struct _sf_cb {
|
|||||||
|
|
||||||
static char *state_file_path;
|
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;
|
unsigned int i;
|
||||||
FILE *fp;
|
FILE *fp;
|
||||||
@ -68,6 +73,8 @@ state_file_read(void)
|
|||||||
|
|
||||||
assert(state_file_path != NULL);
|
assert(state_file_path != NULL);
|
||||||
|
|
||||||
|
g_debug("Saving state file");
|
||||||
|
|
||||||
fp = fopen(state_file_path, "r");
|
fp = fopen(state_file_path, "r");
|
||||||
if (G_UNLIKELY(!fp)) {
|
if (G_UNLIKELY(!fp)) {
|
||||||
g_warning("failed to open %s: %s",
|
g_warning("failed to open %s: %s",
|
||||||
@ -82,6 +89,17 @@ state_file_read(void)
|
|||||||
while(fclose(fp) && errno == EINTR) /* nothing */;
|
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
|
void
|
||||||
state_file_init(const char *path)
|
state_file_init(const char *path)
|
||||||
{
|
{
|
||||||
@ -92,13 +110,19 @@ state_file_init(const char *path)
|
|||||||
|
|
||||||
state_file_path = g_strdup(path);
|
state_file_path = g_strdup(path);
|
||||||
state_file_read();
|
state_file_read();
|
||||||
|
|
||||||
|
save_state_source_id = g_timeout_add(5 * 60 * 1000,
|
||||||
|
timer_save_state_file, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
state_file_finish(void)
|
state_file_finish(void)
|
||||||
{
|
{
|
||||||
|
if (save_state_source_id != 0)
|
||||||
|
g_source_remove(save_state_source_id);
|
||||||
|
|
||||||
if (state_file_path != NULL)
|
if (state_file_path != NULL)
|
||||||
write_state_file();
|
state_file_write();
|
||||||
|
|
||||||
g_free(state_file_path);
|
g_free(state_file_path);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user