aboutsummaryrefslogtreecommitdiffstats
path: root/src/StateFile.cxx
diff options
context:
space:
mode:
authorMax Kellermann <max@duempel.org>2013-04-08 22:31:51 +0200
committerMax Kellermann <max@duempel.org>2013-04-08 23:11:36 +0200
commitdca111519627813608807b60b98f3d5133880120 (patch)
treee19e6733975211a71a0b5b646c4a086be03d7bd1 /src/StateFile.cxx
parent96882175f15230fe2cf9b4e7f3a7f29b5697fe26 (diff)
downloadmpd-dca111519627813608807b60b98f3d5133880120.tar.gz
mpd-dca111519627813608807b60b98f3d5133880120.tar.xz
mpd-dca111519627813608807b60b98f3d5133880120.zip
StateFile: schedule timer only after a change
Save the state file 2 minutes after the last change. This reduces the disruptions by an idle MPD, and MPD can be paged out permanently until it is used.
Diffstat (limited to 'src/StateFile.cxx')
-rw-r--r--src/StateFile.cxx21
1 files changed, 6 insertions, 15 deletions
diff --git a/src/StateFile.cxx b/src/StateFile.cxx
index 301ae9abb..ae782335d 100644
--- a/src/StateFile.cxx
+++ b/src/StateFile.cxx
@@ -41,7 +41,6 @@ StateFile::StateFile(Path &&_path, const char *_path_utf8,
prev_volume_version(0), prev_output_version(0),
prev_playlist_version(0)
{
- ScheduleSeconds(5 * 60);
}
void
@@ -110,24 +109,16 @@ StateFile::Read()
RememberVersions();
}
-inline void
-StateFile::AutoWrite()
+void
+StateFile::CheckModified()
{
- if (!IsModified())
- /* nothing has changed - don't save the state file,
- don't spin up the hard disk */
- return;
-
- Write();
+ if (!IsActive() && IsModified())
+ ScheduleSeconds(2 * 60);
}
-/**
- * This function is called every 5 minutes by the GLib main loop, and
- * saves the state file.
- */
bool
StateFile::OnTimeout()
{
- AutoWrite();
- return true;
+ Write();
+ return false;
}