aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMax Kellermann <max@duempel.org>2008-11-21 18:36:33 +0100
committerMax Kellermann <max@duempel.org>2008-11-21 18:36:33 +0100
commit1c0c583216c3fd7dd638f504bc32d2cb0a7b2f95 (patch)
treed6b968bc38e2eef7a0fc465433bbe07c4b4efc66
parent695d8051d255f89abf3ec73f806049ca77f4008a (diff)
downloadmpd-1c0c583216c3fd7dd638f504bc32d2cb0a7b2f95.tar.gz
mpd-1c0c583216c3fd7dd638f504bc32d2cb0a7b2f95.tar.xz
mpd-1c0c583216c3fd7dd638f504bc32d2cb0a7b2f95.zip
state_file: save state_file every 5 minutes
When MPD quits in a non-clean way, the state file isn't written, and on the next start, MPD time warps to the previous clean shutdown. Save the state file every 5 minutes; this will probably be configurable at a later time. Note that we don't set a wakeup timer for that: when there is no MPD traffic, MPD won't wake up to save the state file. This minor bug is tolerated, because usually there is no change in MPD's state when the main thread is idle.
-rw-r--r--src/main.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/src/main.c b/src/main.c
index a42655f68..6d752f5a2 100644
--- a/src/main.c
+++ b/src/main.c
@@ -383,6 +383,7 @@ int main(int argc, char *argv[])
{
Options options;
clock_t start;
+ GTimer *save_state_timer;
#ifdef HAVE_LOCALE
/* initialize locale */
@@ -446,6 +447,8 @@ int main(int argc, char *argv[])
player_create();
read_state_file();
+ save_state_timer = g_timer_new();
+
while (COMMAND_RETURN_KILL != client_manager_io() &&
COMMAND_RETURN_KILL != handlePendingSignals()) {
unsigned flags;
@@ -459,6 +462,12 @@ int main(int argc, char *argv[])
flags = idle_get();
if (flags != 0)
client_manager_idle_add(flags);
+
+ if (g_timer_elapsed(save_state_timer, NULL) >= 5 * 60) {
+ g_debug("Saving state file\n");
+ write_state_file();
+ g_timer_start(save_state_timer);
+ }
}
write_state_file();