| OLD | NEW |
| (Empty) |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | |
| 2 // Use of this source code is governed by a BSD-style license that can be | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 #include "mojo/public/cpp/utility/mutex.h" | |
| 6 | |
| 7 #include <assert.h> | |
| 8 #include <errno.h> | |
| 9 | |
| 10 namespace mojo { | |
| 11 | |
| 12 // Release builds have inlined (non-error-checking) definitions in the header. | |
| 13 #if !defined(NDEBUG) | |
| 14 Mutex::Mutex() { | |
| 15 pthread_mutexattr_t mutexattr; | |
| 16 int rv = pthread_mutexattr_init(&mutexattr); | |
| 17 assert(rv == 0); | |
| 18 rv = pthread_mutexattr_settype(&mutexattr, PTHREAD_MUTEX_ERRORCHECK); | |
| 19 assert(rv == 0); | |
| 20 rv = pthread_mutex_init(&mutex_, &mutexattr); | |
| 21 assert(rv == 0); | |
| 22 rv = pthread_mutexattr_destroy(&mutexattr); | |
| 23 assert(rv == 0); | |
| 24 } | |
| 25 | |
| 26 Mutex::~Mutex() { | |
| 27 int rv = pthread_mutex_destroy(&mutex_); | |
| 28 assert(rv == 0); | |
| 29 } | |
| 30 | |
| 31 void Mutex::Lock() { | |
| 32 int rv = pthread_mutex_lock(&mutex_); | |
| 33 assert(rv == 0); | |
| 34 } | |
| 35 | |
| 36 void Mutex::Unlock() { | |
| 37 int rv = pthread_mutex_unlock(&mutex_); | |
| 38 assert(rv == 0); | |
| 39 } | |
| 40 | |
| 41 bool Mutex::TryLock() { | |
| 42 int rv = pthread_mutex_trylock(&mutex_); | |
| 43 assert(rv == 0 || rv == EBUSY); | |
| 44 return rv == 0; | |
| 45 } | |
| 46 | |
| 47 void Mutex::AssertHeld() { | |
| 48 assert(pthread_mutex_lock(&mutex_) == EDEADLK); | |
| 49 } | |
| 50 #endif // !defined(NDEBUG) | |
| 51 | |
| 52 } // namespace mojo | |
| OLD | NEW |