diff options
| author | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2014-05-30 23:20:13 +0900 |
|---|---|---|
| committer | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2014-05-30 23:20:13 +0900 |
| commit | 1944d8db58555c08b5f069a2e987fcfdd5aad997 (patch) | |
| tree | c5f878e27a14e35653fca9cbd7548eac37aca820 /src/SaveSessionCommand.cc | |
| parent | 8ada3283f284cde4b2c3ab06bda0882fdf9ee91c (diff) | |
Save session only when there is change since the last serialization
This is a slight optimization not to cause useless disk access. This
only applies to saving session automatically (see
--save-session-interval). aria2.saveSession and serialization at the
end of the session are always performed as before.
Diffstat (limited to 'src/SaveSessionCommand.cc')
| -rw-r--r-- | src/SaveSessionCommand.cc | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/src/SaveSessionCommand.cc b/src/SaveSessionCommand.cc index d94815ad..7e557f27 100644 --- a/src/SaveSessionCommand.cc +++ b/src/SaveSessionCommand.cc @@ -60,12 +60,23 @@ void SaveSessionCommand::preProcess() void SaveSessionCommand::process() { + auto& rgman = getDownloadEngine()->getRequestGroupMan(); + + if(!rgman->getRequireSaveSession()) { + A2_LOG_INFO("No change in queues since last serialization or startup. " + "No serialization is necessary this time."); + return; + } + const std::string& filename = getDownloadEngine()->getOption() ->get(PREF_SAVE_SESSION); + if(!filename.empty()) { - SessionSerializer sessionSerializer(getDownloadEngine()-> - getRequestGroupMan().get()); + SessionSerializer sessionSerializer(rgman.get()); + if(sessionSerializer.save(filename)) { + rgman->clearRequireSaveSession(); + A2_LOG_NOTICE(fmt(_("Serialized session to '%s' successfully."), filename.c_str())); } else { |
