From 37675ea5808670f3137d00b1131a9c8841b44f60 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Axel=20D=C3=B6rfler?= Date: Mon, 2 Jan 2006 13:09:42 +0000 Subject: [PATCH] Deleted ranges were never removed from the ranges hash... this could have finally nailed down bug #77. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15791 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/system/kernel/cache/block_allocator.cpp | 9 ++++++--- src/system/kernel/cache/block_cache.cpp | 1 - 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/system/kernel/cache/block_allocator.cpp b/src/system/kernel/cache/block_allocator.cpp index 9444b45ce4..e25837231d 100644 --- a/src/system/kernel/cache/block_allocator.cpp +++ b/src/system/kernel/cache/block_allocator.cpp @@ -8,9 +8,10 @@ #include -#include #include #include +#include +#include #include @@ -199,8 +200,9 @@ block_range::New(block_cache *cache, block_range **_range) memset(range, 0, sizeof(block_range) + cache->chunks_per_range * sizeof(block_chunk)); range->base = address; - // insert into free ranges list in cache + // insert into free ranges list and hash in cache cache->free_ranges.Add(range); + hash_insert(cache->ranges_hash, range); *_range = range; return B_OK; @@ -234,8 +236,9 @@ block_range::Delete(block_cache *cache, block_range *range) vm_page_set_state(range->pages[i], PAGE_STATE_FREE); } - // remove from cache free list + // remove from cache free list and hash cache->free_ranges.Remove(range); + hash_remove(cache->ranges_hash, range); free(range); } diff --git a/src/system/kernel/cache/block_cache.cpp b/src/system/kernel/cache/block_cache.cpp index 45fc2fd807..540dff1c1d 100644 --- a/src/system/kernel/cache/block_cache.cpp +++ b/src/system/kernel/cache/block_cache.cpp @@ -222,7 +222,6 @@ block_cache::GetFreeRange() return NULL; } - hash_insert(ranges_hash, range); return range; }