summaryrefslogtreecommitdiff
path: root/src/SaveSessionCommand.cc
diff options
context:
space:
mode:
authorTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2014-05-30 23:20:13 +0900
committerTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2014-05-30 23:20:13 +0900
commit1944d8db58555c08b5f069a2e987fcfdd5aad997 (patch)
treec5f878e27a14e35653fca9cbd7548eac37aca820 /src/SaveSessionCommand.cc
parent8ada3283f284cde4b2c3ab06bda0882fdf9ee91c (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.cc15
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 {