diff --git a/src/system/kernel/cache/block_cache.cpp b/src/system/kernel/cache/block_cache.cpp index 5d5cfeee6a..131ff54417 100644 --- a/src/system/kernel/cache/block_cache.cpp +++ b/src/system/kernel/cache/block_cache.cpp @@ -1586,6 +1586,10 @@ block_cache::_GetUnusedBlock() if (block->original_data != NULL) Free(block->original_data); +#if BLOCK_CACHE_DEBUG_CHANGED + if (block->compare != NULL) + Free(block->compare); +#endif return block; } @@ -1809,6 +1813,12 @@ retry: goto retry; } + if (block->unused) { + //TRACE(("remove block %Ld from unused\n", blockNumber)); + block->unused = false; + cache->unused_blocks.Remove(block); + } + if (*_allocated && readBlock) { // read block into cache int32 blockSize = cache->block_size; @@ -1833,12 +1843,6 @@ retry: mark_block_unbusy_reading(cache, block); } - if (block->unused) { - //TRACE(("remove block %Ld from unused\n", blockNumber)); - block->unused = false; - cache->unused_blocks.Remove(block); - } - block->ref_count++; block->last_accessed = system_time() / 1000000L;