From c23f7d246534a9e6ea9c1c9d528c1dbf37948329 Mon Sep 17 00:00:00 2001 From: aee <117306596+aee-google@users.noreply.github.com> Date: Fri, 19 Jan 2024 14:07:24 -0800 Subject: [PATCH] Fix ThreadGroup unit tests for cobalt. (#2232) b/316402576 b/316403307 b/298237650 b/316402635 --- .../condition_variable_starboard.cc | 23 +++++++++++-------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/base/synchronization/condition_variable_starboard.cc b/base/synchronization/condition_variable_starboard.cc index 4093c27ad4b4..53b85ac816a9 100644 --- a/base/synchronization/condition_variable_starboard.cc +++ b/base/synchronization/condition_variable_starboard.cc @@ -25,7 +25,7 @@ namespace base { ConditionVariable::ConditionVariable(Lock* user_lock) : user_mutex_(user_lock->lock_.native_handle()) -#if !defined(NDEBUG) || defined(DCHECK_ALWAYS_ON) +#if DCHECK_IS_ON() , user_lock_(user_lock) #endif @@ -40,31 +40,36 @@ ConditionVariable::~ConditionVariable() { } void ConditionVariable::Wait() { - internal::ScopedBlockingCallWithBaseSyncPrimitives scoped_blocking_call(FROM_HERE, - BlockingType::MAY_BLOCK); -#if !defined(NDEBUG) || defined(DCHECK_ALWAYS_ON) + absl::optional + scoped_blocking_call; + if (waiting_is_blocking_) + scoped_blocking_call.emplace(FROM_HERE, BlockingType::MAY_BLOCK); + +#if DCHECK_IS_ON() user_lock_->CheckHeldAndUnmark(); #endif SbConditionVariableResult result = SbConditionVariableWait(&condition_, user_mutex_); DCHECK(SbConditionVariableIsSignaled(result)); -#if !defined(NDEBUG) || defined(DCHECK_ALWAYS_ON) +#if DCHECK_IS_ON() user_lock_->CheckUnheldAndMark(); #endif } void ConditionVariable::TimedWait(const TimeDelta& max_time) { - internal::ScopedBlockingCallWithBaseSyncPrimitives scoped_blocking_call(FROM_HERE, - BlockingType::MAY_BLOCK); + absl::optional + scoped_blocking_call; + if (waiting_is_blocking_) + scoped_blocking_call.emplace(FROM_HERE, BlockingType::MAY_BLOCK); SbTime duration = max_time.ToSbTime(); -#if !defined(NDEBUG) || defined(DCHECK_ALWAYS_ON) +#if DCHECK_IS_ON() user_lock_->CheckHeldAndUnmark(); #endif SbConditionVariableResult result = SbConditionVariableWaitTimed(&condition_, user_mutex_, duration); DCHECK_NE(kSbConditionVariableFailed, result); -#if !defined(NDEBUG) || defined(DCHECK_ALWAYS_ON) +#if DCHECK_IS_ON() user_lock_->CheckUnheldAndMark(); #endif }