Drop padding in blk* when finalizing file
This commit is contained in:
parent
288fdc092a
commit
1eb578796c
3 changed files with 15 additions and 2 deletions
|
@ -1572,7 +1572,7 @@ bool CBlock::DisconnectBlock(CBlockIndex *pindex, CCoinsViewCache &view, bool *p
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void static FlushBlockFile()
|
void static FlushBlockFile(bool fFinalize = false)
|
||||||
{
|
{
|
||||||
LOCK(cs_LastBlockFile);
|
LOCK(cs_LastBlockFile);
|
||||||
|
|
||||||
|
@ -1580,12 +1580,16 @@ void static FlushBlockFile()
|
||||||
|
|
||||||
FILE *fileOld = OpenBlockFile(posOld);
|
FILE *fileOld = OpenBlockFile(posOld);
|
||||||
if (fileOld) {
|
if (fileOld) {
|
||||||
|
if (fFinalize)
|
||||||
|
TruncateFile(fileOld, infoLastBlockFile.nSize);
|
||||||
FileCommit(fileOld);
|
FileCommit(fileOld);
|
||||||
fclose(fileOld);
|
fclose(fileOld);
|
||||||
}
|
}
|
||||||
|
|
||||||
fileOld = OpenUndoFile(posOld);
|
fileOld = OpenUndoFile(posOld);
|
||||||
if (fileOld) {
|
if (fileOld) {
|
||||||
|
if (fFinalize)
|
||||||
|
TruncateFile(fileOld, infoLastBlockFile.nUndoSize);
|
||||||
FileCommit(fileOld);
|
FileCommit(fileOld);
|
||||||
fclose(fileOld);
|
fclose(fileOld);
|
||||||
}
|
}
|
||||||
|
@ -1991,7 +1995,7 @@ bool FindBlockPos(CDiskBlockPos &pos, unsigned int nAddSize, unsigned int nHeigh
|
||||||
} else {
|
} else {
|
||||||
while (infoLastBlockFile.nSize + nAddSize >= MAX_BLOCKFILE_SIZE) {
|
while (infoLastBlockFile.nSize + nAddSize >= MAX_BLOCKFILE_SIZE) {
|
||||||
printf("Leaving block file %i: %s\n", nLastBlockFile, infoLastBlockFile.ToString().c_str());
|
printf("Leaving block file %i: %s\n", nLastBlockFile, infoLastBlockFile.ToString().c_str());
|
||||||
FlushBlockFile();
|
FlushBlockFile(true);
|
||||||
nLastBlockFile++;
|
nLastBlockFile++;
|
||||||
infoLastBlockFile.SetNull();
|
infoLastBlockFile.SetNull();
|
||||||
pblocktree->ReadBlockFileInfo(nLastBlockFile, infoLastBlockFile); // check whether data for the new file somehow already exist; can fail just fine
|
pblocktree->ReadBlockFileInfo(nLastBlockFile, infoLastBlockFile); // check whether data for the new file somehow already exist; can fail just fine
|
||||||
|
|
|
@ -1161,6 +1161,14 @@ int GetFilesize(FILE* file)
|
||||||
return nFilesize;
|
return nFilesize;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool TruncateFile(FILE *file, unsigned int length) {
|
||||||
|
#if defined(WIN32)
|
||||||
|
return _chsize(_fileno(file), length) == 0;
|
||||||
|
#else
|
||||||
|
return ftruncate(fileno(file), length) == 0;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
// this function tries to make a particular range of a file allocated (corresponding to disk space)
|
// this function tries to make a particular range of a file allocated (corresponding to disk space)
|
||||||
// it is advisory, and the range specified in the arguments will never contain live data
|
// it is advisory, and the range specified in the arguments will never contain live data
|
||||||
void AllocateFileRange(FILE *file, unsigned int offset, unsigned int length) {
|
void AllocateFileRange(FILE *file, unsigned int offset, unsigned int length) {
|
||||||
|
|
|
@ -193,6 +193,7 @@ bool WildcardMatch(const char* psz, const char* mask);
|
||||||
bool WildcardMatch(const std::string& str, const std::string& mask);
|
bool WildcardMatch(const std::string& str, const std::string& mask);
|
||||||
void FileCommit(FILE *fileout);
|
void FileCommit(FILE *fileout);
|
||||||
int GetFilesize(FILE* file);
|
int GetFilesize(FILE* file);
|
||||||
|
bool TruncateFile(FILE *file, unsigned int length);
|
||||||
void AllocateFileRange(FILE *file, unsigned int offset, unsigned int length);
|
void AllocateFileRange(FILE *file, unsigned int offset, unsigned int length);
|
||||||
bool RenameOver(boost::filesystem::path src, boost::filesystem::path dest);
|
bool RenameOver(boost::filesystem::path src, boost::filesystem::path dest);
|
||||||
boost::filesystem::path GetDefaultDataDir();
|
boost::filesystem::path GetDefaultDataDir();
|
||||||
|
|
Loading…
Reference in a new issue