Changes by Zhao Shuai and myself:

* The VMAnonymousCache destructor was unreserving too much physical
  memory.
* Addressed TODO in _SwapBlockBuild(): When the swap block couldn't be
  allocated we wait and loop until it can.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27202 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Ingo Weinhold
2008-08-25 22:04:17 +00:00
parent 56b0c7b90d
commit ddeb7bfaf1
+9 -5
View File
@@ -492,7 +492,8 @@ VMAnonymousCache::~VMAnonymousCache()
} }
swap_space_unreserve(fCommittedSwapSize); swap_space_unreserve(fCommittedSwapSize);
vm_unreserve_memory(committed_size); if (committed_size > fCommittedSwapSize)
vm_unreserve_memory(committed_size - fCommittedSwapSize);
} }
@@ -911,13 +912,16 @@ VMAnonymousCache::_SwapBlockBuild(off_t startPageIndex,
swap_hash_key key = { this, pageIndex }; swap_hash_key key = { this, pageIndex };
swap_block *swap = sSwapHashTable.Lookup(key); swap_block *swap = sSwapHashTable.Lookup(key);
if (swap == NULL) { while (swap == NULL) {
swap = (swap_block *)object_cache_alloc(sSwapBlockCache, swap = (swap_block *)object_cache_alloc(sSwapBlockCache,
CACHE_DONT_SLEEP); CACHE_DONT_SLEEP);
if (swap == NULL) { if (swap == NULL) {
// TODO: wait until memory can be allocated // Wait a short time until memory is available again.
mutex_unlock(&sSwapHashLock); mutex_unlock(&sSwapHashLock);
return; snooze(10000);
mutex_lock(&sSwapHashLock);
swap = sSwapHashTable.Lookup(key);
continue;
} }
swap->key.cache = this; swap->key.cache = this;