summaryrefslogtreecommitdiff
path: root/src/MultiDiskAdaptor.cc
diff options
context:
space:
mode:
authorAli MJ Al-Nasrawy <alimjalnasrawy@gmail.com>2020-06-17 09:51:04 +0300
committerAli MJ Al-Nasrawy <alimjalnasrawy@gmail.com>2020-06-17 11:07:03 +0300
commit01969fc5304a738718c00b6153d672ce4f085747 (patch)
tree7e22ccb113b3c916fc37bc32a55fef438e08e80d /src/MultiDiskAdaptor.cc
parent870e2a6014462c55cc252140f5e215374881c6e9 (diff)
flush OS write buffers before saving control file
This ensures that pieces are physically written to disk before marking them as finished in the control file. This should prevent data loss and corruption when resuming downloads after a system crash. Signed-off-by: Ali MJ Al-Nasrawy <alimjalnasrawy@gmail.com>
Diffstat (limited to 'src/MultiDiskAdaptor.cc')
-rw-r--r--src/MultiDiskAdaptor.cc11
1 files changed, 11 insertions, 0 deletions
diff --git a/src/MultiDiskAdaptor.cc b/src/MultiDiskAdaptor.cc
index d4f419cf..14321aab 100644
--- a/src/MultiDiskAdaptor.cc
+++ b/src/MultiDiskAdaptor.cc
@@ -419,6 +419,17 @@ void MultiDiskAdaptor::writeCache(const WrDiskCacheEntry* entry)
}
}
+void MultiDiskAdaptor::flushOSBuffers()
+{
+ for (auto& dwent : openedDiskWriterEntries_) {
+ auto& dw = dwent->getDiskWriter();
+ if (!dw) {
+ continue;
+ }
+ dw->flushOSBuffers();
+ }
+}
+
bool MultiDiskAdaptor::fileExists()
{
return std::find_if(std::begin(getFileEntries()), std::end(getFileEntries()),