From c9d521ea5b75ebb013928929b7a87be844d593c0 Mon Sep 17 00:00:00 2001 From: Augustin Cavalier Date: Mon, 7 Feb 2022 14:22:12 -0500 Subject: [PATCH] kernel/condition_variable: Various cleanups. * Adjust a comment that now goes with 3 functions and not just 1. * Remove spinlock switch function, this is useless as it cannot change interrupt states here, but we require interrupts to be enabled to wait on a ConditionVariable. * Remove WaitStatus function from ConditionVariableEntry; unused and would require locks anyway. * Implement Publish using Init. --- headers/private/kernel/condition_variable.h | 6 +----- src/system/kernel/condition_variable.cpp | 22 +-------------------- 2 files changed, 2 insertions(+), 26 deletions(-) diff --git a/headers/private/kernel/condition_variable.h b/headers/private/kernel/condition_variable.h index 1538caf800..0565eb5d53 100644 --- a/headers/private/kernel/condition_variable.h +++ b/headers/private/kernel/condition_variable.h @@ -33,8 +33,6 @@ public: status_t Wait(const void* object, uint32 flags = 0, bigtime_t timeout = 0); - inline status_t WaitStatus() const { return fWaitStatus; } - inline ConditionVariable* Variable() const { return fVariable; } private: @@ -71,12 +69,10 @@ public: void Add(ConditionVariableEntry* entry); + // Convenience methods, no ConditionVariableEntry required. status_t Wait(uint32 flags = 0, bigtime_t timeout = 0); - // all-in one, i.e. doesn't need a - // ConditionVariableEntry status_t Wait(mutex* lock, uint32 flags = 0, bigtime_t timeout = 0); status_t Wait(recursive_lock* lock, uint32 flags = 0, bigtime_t timeout = 0); - status_t Wait(spinlock* lock, uint32 flags = 0, bigtime_t timeout = 0); const void* Object() const { return fObject; } const char* ObjectType() const { return fObjectType; } diff --git a/src/system/kernel/condition_variable.cpp b/src/system/kernel/condition_variable.cpp index 42a146ea8b..04f4de6cb3 100644 --- a/src/system/kernel/condition_variable.cpp +++ b/src/system/kernel/condition_variable.cpp @@ -265,15 +265,7 @@ ConditionVariable::Publish(const void* object, const char* objectType) { ASSERT(object != NULL); - fObject = object; - fObjectType = objectType; - new(&fEntries) EntryList; - fEntriesCount = 0; - B_INITIALIZE_SPINLOCK(&fLock); - - T_SCHEDULING_ANALYSIS(InitConditionVariable(this, object, objectType)); - NotifyWaitObjectListeners(&WaitObjectListener::ConditionVariableInitialized, - this); + Init(object, objectType); InterruptsWriteSpinLocker _(sConditionVariableHashLock); @@ -360,18 +352,6 @@ ConditionVariable::Wait(recursive_lock* lock, uint32 flags, bigtime_t timeout) } -status_t -ConditionVariable::Wait(spinlock* lock, uint32 flags, bigtime_t timeout) -{ - ConditionVariableEntry entry; - Add(&entry); - release_spinlock(lock); - status_t res = entry.Wait(flags, timeout); - acquire_spinlock(lock); - return res; -} - - /*static*/ void ConditionVariable::NotifyOne(const void* object, status_t result) {