diff --git a/src/system/kernel/cache/block_cache.cpp b/src/system/kernel/cache/block_cache.cpp index f3fd555a29..e8d8e450aa 100644 --- a/src/system/kernel/cache/block_cache.cpp +++ b/src/system/kernel/cache/block_cache.cpp @@ -275,20 +275,20 @@ block_cache::FreeBlock(cached_block *block) if (range->Unused(this)) block_range::Delete(this, range); - free(block); + delete block; } cached_block * block_cache::NewBlock(off_t blockNumber) { - cached_block *block = (cached_block *)malloc(sizeof(cached_block)); + cached_block *block = new cached_block; if (block == NULL) return NULL; block_range *range = GetFreeRange(); if (range == NULL) { - free(block); + delete block; return NULL; } @@ -322,8 +322,6 @@ block_cache::RemoveUnusedBlocks(int32 maxAccessed, int32 count) for (cached_block *block = unused_blocks.First(); block != NULL; block = next) { next = block->next; - if (block == NULL) - break; if (maxAccessed < block->accessed) continue; @@ -1039,6 +1037,8 @@ block_cache_delete(void *_cache, bool allowWrites) if (allowWrites) block_cache_sync(cache); + BenaphoreLocker locker(&cache->lock); + // free all blocks uint32 cookie = 0; diff --git a/src/system/kernel/cache/block_cache_private.h b/src/system/kernel/cache/block_cache_private.h index f1840314fa..965806044f 100644 --- a/src/system/kernel/cache/block_cache_private.h +++ b/src/system/kernel/cache/block_cache_private.h @@ -33,7 +33,6 @@ struct cached_block { cached_block *transaction_next; block_link link; cached_block *chunk_next; - block_chunk *chunk; off_t block_number; void *data; void *original;