diff options
| author | Philip Kaufmann <[email protected]> | 2014-09-25 08:53:43 +0200 |
|---|---|---|
| committer | Philip Kaufmann <[email protected]> | 2014-10-02 10:46:31 +0200 |
| commit | c9fb27da0a72135417956dca8dafa959ebb67c10 (patch) | |
| tree | 7676f91bda9f87762ff5cdd2cbee18eba50dd854 /src/main.cpp | |
| parent | Merge pull request #5017 (diff) | |
| download | discoin-c9fb27da0a72135417956dca8dafa959ebb67c10.tar.xz discoin-c9fb27da0a72135417956dca8dafa959ebb67c10.zip | |
CBufferedFile: convert into a non-refcounted RAII wrapper
- it now takes over the passed file descriptor and closes it in the
destructor
- this fixes a leak in LoadExternalBlockFile(), where an exception could
cause the file to not getting closed
- disallow copies (like recently added for CAutoFile)
- make nType and nVersion private
Diffstat (limited to 'src/main.cpp')
| -rw-r--r-- | src/main.cpp | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/src/main.cpp b/src/main.cpp index a3e36ff87..033373888 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -3084,6 +3084,7 @@ bool LoadExternalBlockFile(FILE* fileIn, CDiskBlockPos *dbp) int nLoaded = 0; try { + // This takes over fileIn and calls fclose() on it in the CBufferedFile destructor CBufferedFile blkdat(fileIn, 2*MAX_BLOCK_SIZE, MAX_BLOCK_SIZE+8, SER_DISK, CLIENT_VERSION); uint64_t nStartByte = 0; if (dbp) { @@ -3140,7 +3141,6 @@ bool LoadExternalBlockFile(FILE* fileIn, CDiskBlockPos *dbp) LogPrintf("%s : Deserialize or I/O error - %s", __func__, e.what()); } } - fclose(fileIn); } catch(std::runtime_error &e) { AbortNode(_("Error: system error: ") + e.what()); } |