diff --git a/src/core/download_store.cc b/src/core/download_store.cc index b0de92a9..0c151db3 100644 --- a/src/core/download_store.cc +++ b/src/core/download_store.cc @@ -40,6 +40,7 @@ #include #include +#include #include #include #include @@ -100,6 +101,7 @@ DownloadStore::set_path(const std::string& path) { bool DownloadStore::write_bencode(const std::string& filename, const torrent::Object& obj, uint32_t skip_mask) { + int fd; torrent::Object tmp; std::fstream output(filename.c_str(), std::ios::out | std::ios::trunc); @@ -121,6 +123,15 @@ DownloadStore::write_bencode(const std::string& filename, const torrent::Object& goto download_store_save_error; output.close(); + + // Ensure that the new file is actually written to the disk + fd = ::open(filename.c_str(), O_WRONLY); + if (fd < 0) + goto download_store_save_error; + + fdatasync(fd); + ::close(fd); + return true; download_store_save_error: