* 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
This commit is contained in:
parent
5c197c7546
commit
f8d77bfb1c
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user