Upstream version 7.35.144.0
[platform/framework/web/crosswalk.git] / src / mojo / public / utility / lib / mutex.cc
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/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