112b14ae9fa34f4fd0bf21a2a4ac95a4864248fe9Jason Sams/*
212b14ae9fa34f4fd0bf21a2a4ac95a4864248fe9Jason Sams * Copyright (C) 2009 The Android Open Source Project
312b14ae9fa34f4fd0bf21a2a4ac95a4864248fe9Jason Sams *
412b14ae9fa34f4fd0bf21a2a4ac95a4864248fe9Jason Sams * Licensed under the Apache License, Version 2.0 (the "License");
512b14ae9fa34f4fd0bf21a2a4ac95a4864248fe9Jason Sams * you may not use this file except in compliance with the License.
612b14ae9fa34f4fd0bf21a2a4ac95a4864248fe9Jason Sams * You may obtain a copy of the License at
712b14ae9fa34f4fd0bf21a2a4ac95a4864248fe9Jason Sams *
812b14ae9fa34f4fd0bf21a2a4ac95a4864248fe9Jason Sams *      http://www.apache.org/licenses/LICENSE-2.0
912b14ae9fa34f4fd0bf21a2a4ac95a4864248fe9Jason Sams *
1012b14ae9fa34f4fd0bf21a2a4ac95a4864248fe9Jason Sams * Unless required by applicable law or agreed to in writing, software
1112b14ae9fa34f4fd0bf21a2a4ac95a4864248fe9Jason Sams * distributed under the License is distributed on an "AS IS" BASIS,
1212b14ae9fa34f4fd0bf21a2a4ac95a4864248fe9Jason Sams * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1312b14ae9fa34f4fd0bf21a2a4ac95a4864248fe9Jason Sams * See the License for the specific language governing permissions and
1412b14ae9fa34f4fd0bf21a2a4ac95a4864248fe9Jason Sams * limitations under the License.
1512b14ae9fa34f4fd0bf21a2a4ac95a4864248fe9Jason Sams */
1612b14ae9fa34f4fd0bf21a2a4ac95a4864248fe9Jason Sams
1712b14ae9fa34f4fd0bf21a2a4ac95a4864248fe9Jason Sams#include "rsMutex.h"
1812b14ae9fa34f4fd0bf21a2a4ac95a4864248fe9Jason Sams
1911496ac131bb691edf5bdcab3029dceef5c1e4e1Chih-Hung Hsiehnamespace android {
2011496ac131bb691edf5bdcab3029dceef5c1e4e1Chih-Hung Hsiehnamespace renderscript {
2112b14ae9fa34f4fd0bf21a2a4ac95a4864248fe9Jason Sams
22afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex SakhartchoukMutex::Mutex() {
2312b14ae9fa34f4fd0bf21a2a4ac95a4864248fe9Jason Sams}
2412b14ae9fa34f4fd0bf21a2a4ac95a4864248fe9Jason Sams
25afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex SakhartchoukMutex::~Mutex() {
2612b14ae9fa34f4fd0bf21a2a4ac95a4864248fe9Jason Sams    pthread_mutex_destroy(&mMutex);
2712b14ae9fa34f4fd0bf21a2a4ac95a4864248fe9Jason Sams}
2812b14ae9fa34f4fd0bf21a2a4ac95a4864248fe9Jason Sams
29afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukbool Mutex::init() {
3044bef6fba6244292b751387f3d6c31cca96c28adChris Wailes    int status = pthread_mutex_init(&mMutex, nullptr);
3112b14ae9fa34f4fd0bf21a2a4ac95a4864248fe9Jason Sams    if (status) {
32af12ac6a08651464f8d823add667c706f993b587Steve Block        ALOGE("Mutex::Mutex init failure");
3312b14ae9fa34f4fd0bf21a2a4ac95a4864248fe9Jason Sams        return false;
3412b14ae9fa34f4fd0bf21a2a4ac95a4864248fe9Jason Sams    }
3512b14ae9fa34f4fd0bf21a2a4ac95a4864248fe9Jason Sams    return true;
3612b14ae9fa34f4fd0bf21a2a4ac95a4864248fe9Jason Sams}
3712b14ae9fa34f4fd0bf21a2a4ac95a4864248fe9Jason Sams
38afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukbool Mutex::lock() {
3912b14ae9fa34f4fd0bf21a2a4ac95a4864248fe9Jason Sams    int status;
4012b14ae9fa34f4fd0bf21a2a4ac95a4864248fe9Jason Sams    status = pthread_mutex_lock(&mMutex);
4112b14ae9fa34f4fd0bf21a2a4ac95a4864248fe9Jason Sams    if (status) {
42af12ac6a08651464f8d823add667c706f993b587Steve Block        ALOGE("Mutex: error %i locking.", status);
4312b14ae9fa34f4fd0bf21a2a4ac95a4864248fe9Jason Sams        return false;
4412b14ae9fa34f4fd0bf21a2a4ac95a4864248fe9Jason Sams    }
4512b14ae9fa34f4fd0bf21a2a4ac95a4864248fe9Jason Sams    return true;
4612b14ae9fa34f4fd0bf21a2a4ac95a4864248fe9Jason Sams}
4712b14ae9fa34f4fd0bf21a2a4ac95a4864248fe9Jason Sams
48afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukbool Mutex::unlock() {
4912b14ae9fa34f4fd0bf21a2a4ac95a4864248fe9Jason Sams    int status;
5012b14ae9fa34f4fd0bf21a2a4ac95a4864248fe9Jason Sams    status = pthread_mutex_unlock(&mMutex);
5112b14ae9fa34f4fd0bf21a2a4ac95a4864248fe9Jason Sams    if (status) {
52af12ac6a08651464f8d823add667c706f993b587Steve Block        ALOGE("Mutex error %i unlocking.", status);
5312b14ae9fa34f4fd0bf21a2a4ac95a4864248fe9Jason Sams        return false;
5412b14ae9fa34f4fd0bf21a2a4ac95a4864248fe9Jason Sams    }
5512b14ae9fa34f4fd0bf21a2a4ac95a4864248fe9Jason Sams    return true;
5612b14ae9fa34f4fd0bf21a2a4ac95a4864248fe9Jason Sams}
5712b14ae9fa34f4fd0bf21a2a4ac95a4864248fe9Jason Sams
5811496ac131bb691edf5bdcab3029dceef5c1e4e1Chih-Hung Hsieh} // namespace renderscript
5911496ac131bb691edf5bdcab3029dceef5c1e4e1Chih-Hung Hsieh} // namespace android
60