// Copyright 2014 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "mojo/public/cpp/utility/mutex.h" #include <assert.h> #include <errno.h> namespace mojo { // Release builds have inlined (non-error-checking) definitions in the header. #if !defined(NDEBUG) Mutex::Mutex() { pthread_mutexattr_t mutexattr; int rv = pthread_mutexattr_init(&mutexattr); assert(rv == 0); rv = pthread_mutexattr_settype(&mutexattr, PTHREAD_MUTEX_ERRORCHECK); assert(rv == 0); rv = pthread_mutex_init(&mutex_, &mutexattr); assert(rv == 0); rv = pthread_mutexattr_destroy(&mutexattr); assert(rv == 0); } Mutex::~Mutex() { int rv = pthread_mutex_destroy(&mutex_); assert(rv == 0); } void Mutex::Lock() { int rv = pthread_mutex_lock(&mutex_); assert(rv == 0); } void Mutex::Unlock() { int rv = pthread_mutex_unlock(&mutex_); assert(rv == 0); } bool Mutex::TryLock() { int rv = pthread_mutex_trylock(&mutex_); assert(rv == 0 || rv == EBUSY); return rv == 0; } void Mutex::AssertHeld() { assert(pthread_mutex_lock(&mutex_) == EDEADLK); } #endif // !defined(NDEBUG) } // namespace mojo