From 8f68daed841b02dc2c8a6befa2e67f5344aac1c9 Mon Sep 17 00:00:00 2001 From: Augustin Cavalier Date: Mon, 25 Apr 2022 17:59:50 -0400 Subject: [PATCH] kernel: Make use of the new ConditionVariable lock-switching APIs in a few places. --- src/system/kernel/kernel_daemon.cpp | 10 +--------- src/system/kernel/locks/user_mutex.cpp | 7 +------ src/system/kernel/slab/MemoryManager.cpp | 7 +------ src/system/kernel/slab/Slab.cpp | 13 ++----------- 4 files changed, 5 insertions(+), 32 deletions(-) diff --git a/src/system/kernel/kernel_daemon.cpp b/src/system/kernel/kernel_daemon.cpp index 5c1f7cdb79..2a93b100b1 100644 --- a/src/system/kernel/kernel_daemon.cpp +++ b/src/system/kernel/kernel_daemon.cpp @@ -122,15 +122,7 @@ KernelDaemon::Unregister(daemon_hook function, void* arg) // wait if it's busy while (daemon->executing) { fUnregisterWaiters++; - - ConditionVariableEntry entry; - fUnregisterCondition.Add(&entry); - - locker.Unlock(); - - entry.Wait(); - - locker.Lock(); + fUnregisterCondition.Wait(locker.Get()); } } diff --git a/src/system/kernel/locks/user_mutex.cpp b/src/system/kernel/locks/user_mutex.cpp index 74489a2051..efe2abab9f 100644 --- a/src/system/kernel/locks/user_mutex.cpp +++ b/src/system/kernel/locks/user_mutex.cpp @@ -111,13 +111,8 @@ user_mutex_wait_locked(int32* mutex, addr_t physicalAddress, const char* name, add_user_mutex_entry(&entry); // wait - ConditionVariableEntry waitEntry; entry.condition.Init((void*)physicalAddress, "user mutex"); - entry.condition.Add(&waitEntry); - - locker.Unlock(); - status_t error = waitEntry.Wait(flags, timeout); - locker.Lock(); + status_t error = entry.condition.Wait(locker.Get(), flags, timeout); if (error != B_OK && entry.locked) error = B_OK; diff --git a/src/system/kernel/slab/MemoryManager.cpp b/src/system/kernel/slab/MemoryManager.cpp index 25e35df518..35e68c4ba5 100644 --- a/src/system/kernel/slab/MemoryManager.cpp +++ b/src/system/kernel/slab/MemoryManager.cpp @@ -983,12 +983,7 @@ MemoryManager::_AllocateChunks(size_t chunkSize, uint32 chunkCount, } else break; - ConditionVariableEntry entry; - allocationEntry->condition.Add(&entry); - - mutex_unlock(&sLock); - entry.Wait(); - mutex_lock(&sLock); + allocationEntry->condition.Wait(&sLock); if (_GetChunks(metaChunkList, chunkSize, chunkCount, _metaChunk, _chunk)) { diff --git a/src/system/kernel/slab/Slab.cpp b/src/system/kernel/slab/Slab.cpp index 9f8e7a0795..01c5e96f45 100644 --- a/src/system/kernel/slab/Slab.cpp +++ b/src/system/kernel/slab/Slab.cpp @@ -920,12 +920,7 @@ object_cache_reserve_internal(ObjectCache* cache, size_t objectCount, } else break; - ConditionVariableEntry entry; - resizeEntry->condition.Add(&entry); - - cache->Unlock(); - entry.Wait(); - cache->Lock(); + resizeEntry->condition.Wait(&cache->lock); } // prepare the resize entry others can wait on @@ -1072,11 +1067,7 @@ object_cache_maintainer(void*) continue; } - ConditionVariableEntry entry; - sMaintenanceCondition.Add(&entry); - locker.Unlock(); - entry.Wait(); - locker.Lock(); + sMaintenanceCondition.Wait(locker.Get()); } ObjectCache* cache = sMaintenanceQueue.RemoveHead();