diff options
| author | practicalswift <[email protected]> | 2019-06-14 08:30:43 +0200 |
|---|---|---|
| committer | practicalswift <[email protected]> | 2019-06-14 08:30:43 +0200 |
| commit | d9753383b9e1b61d19d98bcd1d66607f398c7e9f (patch) | |
| tree | d40073c84b1e2ebfe4599fb9f170c9c73ab422bf | |
| parent | Merge #16201: devtools: Always use unabbreviated commit IDs in github-merge.py (diff) | |
| download | discoin-d9753383b9e1b61d19d98bcd1d66607f398c7e9f.tar.xz discoin-d9753383b9e1b61d19d98bcd1d66607f398c7e9f.zip | |
addrdb: Remove temporary files created in SerializeFileDB. Fixes non-determinism in unit tests.
| -rw-r--r-- | src/addrdb.cpp | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/src/addrdb.cpp b/src/addrdb.cpp index c6083f555..db936486b 100644 --- a/src/addrdb.cpp +++ b/src/addrdb.cpp @@ -44,18 +44,30 @@ bool SerializeFileDB(const std::string& prefix, const fs::path& path, const Data fs::path pathTmp = GetDataDir() / tmpfn; FILE *file = fsbridge::fopen(pathTmp, "wb"); CAutoFile fileout(file, SER_DISK, CLIENT_VERSION); - if (fileout.IsNull()) + if (fileout.IsNull()) { + fileout.fclose(); + remove(pathTmp); return error("%s: Failed to open file %s", __func__, pathTmp.string()); + } // Serialize - if (!SerializeDB(fileout, data)) return false; - if (!FileCommit(fileout.Get())) + if (!SerializeDB(fileout, data)) { + fileout.fclose(); + remove(pathTmp); + return false; + } + if (!FileCommit(fileout.Get())) { + fileout.fclose(); + remove(pathTmp); return error("%s: Failed to flush file %s", __func__, pathTmp.string()); + } fileout.fclose(); // replace existing file, if any, with new file - if (!RenameOver(pathTmp, path)) + if (!RenameOver(pathTmp, path)) { + remove(pathTmp); return error("%s: Rename-into-place failed", __func__); + } return true; } |