1 : // Copyright (c) 2006-2008 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 "base/lock_impl.h"
6 :
7 : #include <errno.h>
8 :
9 : #include "base/logging.h"
10 :
11 13782 : LockImpl::LockImpl() {
12 : #ifndef NDEBUG
13 : // In debug, setup attributes for lock error checking.
14 : pthread_mutexattr_t mta;
15 13782 : int rv = pthread_mutexattr_init(&mta);
16 13782 : DCHECK_EQ(rv, 0);
17 13782 : rv = pthread_mutexattr_settype(&mta, PTHREAD_MUTEX_ERRORCHECK);
18 13782 : DCHECK_EQ(rv, 0);
19 13782 : rv = pthread_mutex_init(&os_lock_, &mta);
20 13782 : DCHECK_EQ(rv, 0);
21 13782 : rv = pthread_mutexattr_destroy(&mta);
22 13782 : DCHECK_EQ(rv, 0);
23 : #else
24 : // In release, go with the default lock attributes.
25 : pthread_mutex_init(&os_lock_, NULL);
26 : #endif
27 13782 : }
28 :
29 11030 : LockImpl::~LockImpl() {
30 11030 : int rv = pthread_mutex_destroy(&os_lock_);
31 11030 : DCHECK_EQ(rv, 0);
32 11030 : }
33 :
34 0 : bool LockImpl::Try() {
35 0 : int rv = pthread_mutex_trylock(&os_lock_);
36 0 : DCHECK(rv == 0 || rv == EBUSY);
37 0 : return rv == 0;
38 : }
39 :
40 90878 : void LockImpl::Lock() {
41 90878 : int rv = pthread_mutex_lock(&os_lock_);
42 90878 : DCHECK_EQ(rv, 0);
43 90878 : }
44 :
45 90878 : void LockImpl::Unlock() {
46 90878 : int rv = pthread_mutex_unlock(&os_lock_);
47 90878 : DCHECK_EQ(rv, 0);
48 90878 : }
|