1/* 2 * Copyright (C) 2012 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17/* 18 * Encapsulate a mutex for thread synchronization. 19 */ 20 21#include "Mutex.h" 22#include "NfcJniUtil.h" 23 24#include <cutils/log.h> 25#include <errno.h> 26 27/******************************************************************************* 28** 29** Function: Mutex 30** 31** Description: Initialize member variables. 32** 33** Returns: None. 34** 35*******************************************************************************/ 36Mutex::Mutex () 37{ 38 memset (&mMutex, 0, sizeof(mMutex)); 39 int res = pthread_mutex_init (&mMutex, NULL); 40 if (res != 0) 41 { 42 ALOGE ("Mutex::Mutex: fail init; error=0x%X", res); 43 } 44} 45 46 47/******************************************************************************* 48** 49** Function: ~Mutex 50** 51** Description: Cleanup all resources. 52** 53** Returns: None. 54** 55*******************************************************************************/ 56Mutex::~Mutex () 57{ 58 int res = pthread_mutex_destroy (&mMutex); 59 if (res != 0) 60 { 61 ALOGE ("Mutex::~Mutex: fail destroy; error=0x%X", res); 62 } 63} 64 65 66/******************************************************************************* 67** 68** Function: lock 69** 70** Description: Block the thread and try lock the mutex. 71** 72** Returns: None. 73** 74*******************************************************************************/ 75void Mutex::lock () 76{ 77 int res = pthread_mutex_lock (&mMutex); 78 if (res != 0) 79 { 80 ALOGE ("Mutex::lock: fail lock; error=0x%X", res); 81 } 82} 83 84 85/******************************************************************************* 86** 87** Function: unlock 88** 89** Description: Unlock a mutex to unblock a thread. 90** 91** Returns: None. 92** 93*******************************************************************************/ 94void Mutex::unlock () 95{ 96 int res = pthread_mutex_unlock (&mMutex); 97 if (res != 0) 98 { 99 ALOGE ("Mutex::unlock: fail unlock; error=0x%X", res); 100 } 101} 102 103 104/******************************************************************************* 105** 106** Function: tryLock 107** 108** Description: Try to lock the mutex. 109** 110** Returns: True if the mutex is locked. 111** 112*******************************************************************************/ 113bool Mutex::tryLock () 114{ 115 int res = pthread_mutex_trylock (&mMutex); 116 if ((res != 0) && (res != EBUSY)) 117 { 118 ALOGE ("Mutex::tryLock: error=0x%X", res); 119 } 120 return res == 0; 121} 122 123 124/******************************************************************************* 125** 126** Function: nativeHandle 127** 128** Description: Get the handle of the mutex. 129** 130** Returns: Handle of the mutex. 131** 132*******************************************************************************/ 133pthread_mutex_t* Mutex::nativeHandle () 134{ 135 return &mMutex; 136} 137 138 139