OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "base/synchronization/lock_impl.h" | 5 #include "base/synchronization/lock_impl.h" |
6 | 6 |
7 #include <errno.h> | 7 #include <errno.h> |
8 #include <string.h> | 8 #include <string.h> |
9 | 9 |
10 #include "base/logging.h" | 10 #include "base/logging.h" |
11 | 11 |
12 namespace base { | 12 namespace base { |
13 namespace internal { | 13 namespace internal { |
14 | 14 |
15 LockImpl::LockImpl() { | 15 LockImpl::LockImpl() { |
16 #ifndef NDEBUG | 16 #ifndef NDEBUG |
17 // In debug, setup attributes for lock error checking. | 17 // In debug, setup attributes for lock error checking. |
18 pthread_mutexattr_t mta; | 18 pthread_mutexattr_t mta; |
19 int rv = pthread_mutexattr_init(&mta); | 19 int rv = pthread_mutexattr_init(&mta); |
20 DCHECK_EQ(rv, 0) << ". " << strerror(rv); | 20 DCHECK_EQ(rv, 0) << ". " << strerror(rv); |
21 rv = pthread_mutexattr_settype(&mta, PTHREAD_MUTEX_ERRORCHECK); | 21 rv = pthread_mutexattr_settype(&mta, PTHREAD_MUTEX_ERRORCHECK); |
22 DCHECK_EQ(rv, 0) << ". " << strerror(rv); | 22 DCHECK_EQ(rv, 0) << ". " << strerror(rv); |
23 rv = pthread_mutex_init(&os_lock_, &mta); | 23 rv = pthread_mutex_init(&native_handle_, &mta); |
24 DCHECK_EQ(rv, 0) << ". " << strerror(rv); | 24 DCHECK_EQ(rv, 0) << ". " << strerror(rv); |
25 rv = pthread_mutexattr_destroy(&mta); | 25 rv = pthread_mutexattr_destroy(&mta); |
26 DCHECK_EQ(rv, 0) << ". " << strerror(rv); | 26 DCHECK_EQ(rv, 0) << ". " << strerror(rv); |
27 #else | 27 #else |
28 // In release, go with the default lock attributes. | 28 // In release, go with the default lock attributes. |
29 pthread_mutex_init(&os_lock_, NULL); | 29 pthread_mutex_init(&native_handle_, NULL); |
30 #endif | 30 #endif |
31 } | 31 } |
32 | 32 |
33 LockImpl::~LockImpl() { | 33 LockImpl::~LockImpl() { |
34 int rv = pthread_mutex_destroy(&os_lock_); | 34 int rv = pthread_mutex_destroy(&native_handle_); |
35 DCHECK_EQ(rv, 0) << ". " << strerror(rv); | 35 DCHECK_EQ(rv, 0) << ". " << strerror(rv); |
36 } | 36 } |
37 | 37 |
38 bool LockImpl::Try() { | 38 bool LockImpl::Try() { |
39 int rv = pthread_mutex_trylock(&os_lock_); | 39 int rv = pthread_mutex_trylock(&native_handle_); |
40 DCHECK(rv == 0 || rv == EBUSY) << ". " << strerror(rv); | 40 DCHECK(rv == 0 || rv == EBUSY) << ". " << strerror(rv); |
41 return rv == 0; | 41 return rv == 0; |
42 } | 42 } |
43 | 43 |
44 void LockImpl::Lock() { | 44 void LockImpl::Lock() { |
45 int rv = pthread_mutex_lock(&os_lock_); | 45 int rv = pthread_mutex_lock(&native_handle_); |
46 DCHECK_EQ(rv, 0) << ". " << strerror(rv); | 46 DCHECK_EQ(rv, 0) << ". " << strerror(rv); |
47 } | 47 } |
48 | 48 |
49 void LockImpl::Unlock() { | 49 void LockImpl::Unlock() { |
50 int rv = pthread_mutex_unlock(&os_lock_); | 50 int rv = pthread_mutex_unlock(&native_handle_); |
51 DCHECK_EQ(rv, 0) << ". " << strerror(rv); | 51 DCHECK_EQ(rv, 0) << ". " << strerror(rv); |
52 } | 52 } |
53 | 53 |
54 } // namespace internal | 54 } // namespace internal |
55 } // namespace base | 55 } // namespace base |
OLD | NEW |