Skip to content

Commit

Permalink
Merge bitcoin#16212: addrdb: Avoid eating inodes - remove temporary f…
Browse files Browse the repository at this point in the history
…iles created by SerializeFileDB in case of errors

d975338 addrdb: Remove temporary files created in SerializeFileDB. Fixes non-determinism in unit tests. (practicalswift)

Pull request description:

  Remove temporary files created in `SerializeFileDB` in case of errors.

  _Edit: Previously this was hit non-deterministically from the tests: that is no longer the case but the cleanup issue remains :-)_

ACKs for top commit:
  laanwj:
    code-review ACK d975338

Tree-SHA512: e72b74b8de411f433bd8bb354cacae07ab75a240db6232bc6a37802ccd8086bff5275ce3d196ddde033d8ab9e2794bb8f60eb83554af7ec2e9f91d6186cb4647
  • Loading branch information
laanwj authored and PastaPastaPasta committed Jun 28, 2021
1 parent b19a210 commit 95ce274
Showing 1 changed file with 16 additions and 4 deletions.
20 changes: 16 additions & 4 deletions src/addrdb.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
Expand Down

0 comments on commit 95ce274

Please sign in to comment.