summaryrefslogtreecommitdiffstats
path: root/base/condition_variable_posix.cc
diff options
context:
space:
mode:
Diffstat (limited to 'base/condition_variable_posix.cc')
-rw-r--r--base/condition_variable_posix.cc18
1 files changed, 17 insertions, 1 deletions
diff --git a/base/condition_variable_posix.cc b/base/condition_variable_posix.cc
index 8c5a5c2..9555be7 100644
--- a/base/condition_variable_posix.cc
+++ b/base/condition_variable_posix.cc
@@ -16,7 +16,11 @@ using base::Time;
using base::TimeDelta;
ConditionVariable::ConditionVariable(Lock* user_lock)
- : user_mutex_(user_lock->lock_impl()->os_lock()) {
+ : user_mutex_(user_lock->lock_.os_lock())
+#if !defined(NDEBUG)
+ , user_lock_(user_lock)
+#endif
+{
int rv = pthread_cond_init(&condition_, NULL);
DCHECK(rv == 0);
}
@@ -27,8 +31,14 @@ ConditionVariable::~ConditionVariable() {
}
void ConditionVariable::Wait() {
+#if !defined(NDEBUG)
+ user_lock_->CheckHeldAndUnmark();
+#endif
int rv = pthread_cond_wait(&condition_, user_mutex_);
DCHECK(rv == 0);
+#if !defined(NDEBUG)
+ user_lock_->CheckUnheldAndMark();
+#endif
}
void ConditionVariable::TimedWait(const TimeDelta& max_time) {
@@ -46,8 +56,14 @@ void ConditionVariable::TimedWait(const TimeDelta& max_time) {
abstime.tv_nsec %= Time::kNanosecondsPerSecond;
DCHECK(abstime.tv_sec >= now.tv_sec); // Overflow paranoia
+#if !defined(NDEBUG)
+ user_lock_->CheckHeldAndUnmark();
+#endif
int rv = pthread_cond_timedwait(&condition_, user_mutex_, &abstime);
DCHECK(rv == 0 || rv == ETIMEDOUT);
+#if !defined(NDEBUG)
+ user_lock_->CheckUnheldAndMark();
+#endif
}
void ConditionVariable::Broadcast() {