From f8d77bfb1c2e17274771ff800a09cb5e0bf45ecc Mon Sep 17 00:00:00 2001 From: Ingo Weinhold Date: Fri, 14 Nov 2008 01:50:13 +0000 Subject: [PATCH] * The deferred_deleter() kernel daemon dropped out, if the list with memory to free was empty, but didn't check the list with objects to delete. So those were queued until someone used deferred_free(). Should fix #3128. * Run the daemon once a second instead of every five seconds, so memory is recycled a little quicker. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28644 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/system/kernel/heap.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/system/kernel/heap.cpp b/src/system/kernel/heap.cpp index 34151c9eb3..575fbb7a47 100644 --- a/src/system/kernel/heap.cpp +++ b/src/system/kernel/heap.cpp @@ -1614,7 +1614,7 @@ deferred_deleter(void *arg, int iteration) { // move entries and deletables to on-stack lists InterruptsSpinLocker locker(sDeferredFreeListLock); - if (sDeferredFreeList.IsEmpty()) + if (sDeferredFreeList.IsEmpty() && sDeferredDeletableList.IsEmpty()) return; DeferredFreeList entries; @@ -1786,7 +1786,8 @@ heap_init_post_thread() return sHeapGrowThread; } - if (register_kernel_daemon(deferred_deleter, NULL, 50) != B_OK) + // run the deferred deleter roughly once a second + if (register_kernel_daemon(deferred_deleter, NULL, 10) != B_OK) panic("heap_init_post_thread(): failed to init deferred deleter"); send_signal_etc(sHeapGrowThread, SIGCONT, B_DO_NOT_RESCHEDULE);