diff options
| author | Ali MJ Al-Nasrawy <alimjalnasrawy@gmail.com> | 2020-06-17 09:51:04 +0300 |
|---|---|---|
| committer | Ali MJ Al-Nasrawy <alimjalnasrawy@gmail.com> | 2020-06-17 11:07:03 +0300 |
| commit | 01969fc5304a738718c00b6153d672ce4f085747 (patch) | |
| tree | 7e22ccb113b3c916fc37bc32a55fef438e08e80d /src/MultiDiskAdaptor.cc | |
| parent | 870e2a6014462c55cc252140f5e215374881c6e9 (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.cc | 11 |
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()), |
