@@ -3014,21 +3014,13 @@ static bool FindBlockPos(CDiskBlockPos &pos, unsigned int nAddSize, unsigned int
3014
3014
vinfoBlockFile[nFile].nSize += nAddSize;
3015
3015
3016
3016
if (!fKnown ) {
3017
- unsigned int nOldChunks = (pos.nPos + BLOCKFILE_CHUNK_SIZE - 1 ) / BLOCKFILE_CHUNK_SIZE;
3018
- unsigned int nNewChunks = (vinfoBlockFile[nFile].nSize + BLOCKFILE_CHUNK_SIZE - 1 ) / BLOCKFILE_CHUNK_SIZE;
3019
- if (nNewChunks > nOldChunks) {
3020
- if (fPruneMode )
3021
- fCheckForPruning = true ;
3022
- if (CheckDiskSpace (GetBlocksDir (), nNewChunks * BLOCKFILE_CHUNK_SIZE - pos.nPos )) {
3023
- FILE *file = OpenBlockFile (pos);
3024
- if (file) {
3025
- LogPrintf (" Pre-allocating up to position 0x%x in blk%05u.dat\n " , nNewChunks * BLOCKFILE_CHUNK_SIZE, pos.nFile );
3026
- AllocateFileRange (file, pos.nPos , nNewChunks * BLOCKFILE_CHUNK_SIZE - pos.nPos );
3027
- fclose (file);
3028
- }
3029
- }
3030
- else
3031
- return AbortNode (" Disk space is low!" , _ (" Error: Disk space is low!" ));
3017
+ bool out_of_space;
3018
+ size_t bytes_allocated = BlockFileSeq ().Allocate (pos, nAddSize, out_of_space);
3019
+ if (out_of_space) {
3020
+ return AbortNode (" Disk space is low!" , _ (" Error: Disk space is low!" ));
3021
+ }
3022
+ if (bytes_allocated != 0 && fPruneMode ) {
3023
+ fCheckForPruning = true ;
3032
3024
}
3033
3025
}
3034
3026
@@ -3042,27 +3034,17 @@ static bool FindUndoPos(CValidationState &state, int nFile, CDiskBlockPos &pos,
3042
3034
3043
3035
LOCK (cs_LastBlockFile);
3044
3036
3045
- unsigned int nNewSize;
3046
3037
pos.nPos = vinfoBlockFile[nFile].nUndoSize ;
3047
- nNewSize = vinfoBlockFile[nFile].nUndoSize += nAddSize;
3038
+ vinfoBlockFile[nFile].nUndoSize += nAddSize;
3048
3039
setDirtyFileInfo.insert (nFile);
3049
3040
3050
- unsigned int nOldChunks = (pos.nPos + UNDOFILE_CHUNK_SIZE - 1 ) / UNDOFILE_CHUNK_SIZE;
3051
- unsigned int nNewChunks = (nNewSize + UNDOFILE_CHUNK_SIZE - 1 ) / UNDOFILE_CHUNK_SIZE;
3052
- if (nNewChunks > nOldChunks) {
3053
- if (fPruneMode )
3054
- fCheckForPruning = true ;
3055
- if (CheckDiskSpace (GetBlocksDir (), nNewChunks * UNDOFILE_CHUNK_SIZE - pos.nPos )) {
3056
- FILE *file = OpenUndoFile (pos);
3057
- if (file) {
3058
- LogPrintf (" Pre-allocating up to position 0x%x in rev%05u.dat\n " , nNewChunks * UNDOFILE_CHUNK_SIZE, pos.nFile );
3059
- AllocateFileRange (file, pos.nPos , nNewChunks * UNDOFILE_CHUNK_SIZE - pos.nPos );
3060
- fclose (file);
3061
- }
3062
- }
3063
- else {
3064
- return AbortNode (state, " Disk space is low!" , _ (" Error: Disk space is low!" ));
3065
- }
3041
+ bool out_of_space;
3042
+ size_t bytes_allocated = UndoFileSeq ().Allocate (pos, nAddSize, out_of_space);
3043
+ if (out_of_space) {
3044
+ return AbortNode (state, " Disk space is low!" , _ (" Error: Disk space is low!" ));
3045
+ }
3046
+ if (bytes_allocated != 0 && fPruneMode ) {
3047
+ fCheckForPruning = true ;
3066
3048
}
3067
3049
3068
3050
return true ;
0 commit comments