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.
This commit is contained in:
Max Kellermann 2008-11-21 18:36:33 +01:00
parent 695d8051d2
commit 1c0c583216

View File

@ -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();