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.
This commit is contained in:
parent
96882175f1
commit
dca1115196
2
NEWS
2
NEWS
|
@ -13,7 +13,7 @@ ver 0.18 (2012/??/??)
|
|||
- new option "tags" may be used to disable sending tags to output
|
||||
- alsa: workaround for noise after manual song change
|
||||
* improved decoder/output error reporting
|
||||
|
||||
* eliminate timer wakeup on idle MPD
|
||||
|
||||
ver 0.17.4 (2013/??/??)
|
||||
* protocol:
|
||||
|
|
|
@ -347,6 +347,9 @@ idle_event_emitted(void)
|
|||
unsigned flags = idle_get();
|
||||
if (flags != 0)
|
||||
client_list->IdleAdd(flags);
|
||||
|
||||
if (flags & (IDLE_PLAYLIST|IDLE_PLAYER|IDLE_MIXER|IDLE_OUTPUT))
|
||||
state_file->CheckModified();
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -48,6 +48,11 @@ public:
|
|||
void Read();
|
||||
void Write();
|
||||
|
||||
/**
|
||||
* Schedules a write if MPD's state was modified.
|
||||
*/
|
||||
void CheckModified();
|
||||
|
||||
private:
|
||||
/**
|
||||
* Save the current state versions for use with IsModified().
|
||||
|
@ -61,8 +66,6 @@ private:
|
|||
gcc_pure
|
||||
bool IsModified() const;
|
||||
|
||||
void AutoWrite();
|
||||
|
||||
/* virtual methods from TimeoutMonitor */
|
||||
virtual bool OnTimeout() override;
|
||||
};
|
||||
|
|
Loading…
Reference in New Issue