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.
This commit is contained in:
Augustin Cavalier
2022-02-07 14:22:12 -05:00
parent 8774bf6012
commit c9d521ea5b
2 changed files with 2 additions and 26 deletions
+1 -5
View File
@@ -33,8 +33,6 @@ public:
status_t Wait(const void* object, uint32 flags = 0, status_t Wait(const void* object, uint32 flags = 0,
bigtime_t timeout = 0); bigtime_t timeout = 0);
inline status_t WaitStatus() const { return fWaitStatus; }
inline ConditionVariable* Variable() const { return fVariable; } inline ConditionVariable* Variable() const { return fVariable; }
private: private:
@@ -71,12 +69,10 @@ public:
void Add(ConditionVariableEntry* entry); void Add(ConditionVariableEntry* entry);
// Convenience methods, no ConditionVariableEntry required.
status_t Wait(uint32 flags = 0, bigtime_t timeout = 0); 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(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(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 void* Object() const { return fObject; }
const char* ObjectType() const { return fObjectType; } const char* ObjectType() const { return fObjectType; }
+1 -21
View File
@@ -265,15 +265,7 @@ ConditionVariable::Publish(const void* object, const char* objectType)
{ {
ASSERT(object != NULL); ASSERT(object != NULL);
fObject = object; Init(object, objectType);
fObjectType = objectType;
new(&fEntries) EntryList;
fEntriesCount = 0;
B_INITIALIZE_SPINLOCK(&fLock);
T_SCHEDULING_ANALYSIS(InitConditionVariable(this, object, objectType));
NotifyWaitObjectListeners(&WaitObjectListener::ConditionVariableInitialized,
this);
InterruptsWriteSpinLocker _(sConditionVariableHashLock); 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 /*static*/ void
ConditionVariable::NotifyOne(const void* object, status_t result) ConditionVariable::NotifyOne(const void* object, status_t result)
{ {