From 9747721a43cf95294b3c1c7632ef20859b3c4dee Mon Sep 17 00:00:00 2001 From: Augustin Cavalier Date: Wed, 26 Apr 2023 17:12:24 -0400 Subject: [PATCH] kernel/condition_variable: Add a fast-exit from Wait() for negative timeouts. acquire_sem_etc does something very similar. --- src/system/kernel/condition_variable.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/system/kernel/condition_variable.cpp b/src/system/kernel/condition_variable.cpp index f504ae1545..019c07eb7d 100644 --- a/src/system/kernel/condition_variable.cpp +++ b/src/system/kernel/condition_variable.cpp @@ -214,6 +214,11 @@ ConditionVariableEntry::Wait(uint32 flags, bigtime_t timeout) if (variable == NULL) return fWaitStatus; + if ((flags & B_RELATIVE_TIMEOUT) != 0 && timeout <= 0) { + _RemoveFromVariable(); + return B_WOULD_BLOCK; + } + InterruptsLocker _; SpinLocker schedulerLocker(thread_get_current_thread()->scheduler_lock);