10f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/*
20f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Copyright (C) 2009 The Android Open Source Project
30f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines *
40f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Licensed under the Apache License, Version 2.0 (the "License");
50f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * you may not use this file except in compliance with the License.
60f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * You may obtain a copy of the License at
70f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines *
80f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines *      http://www.apache.org/licenses/LICENSE-2.0
90f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines *
100f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Unless required by applicable law or agreed to in writing, software
110f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * distributed under the License is distributed on an "AS IS" BASIS,
120f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
130f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * See the License for the specific language governing permissions and
140f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * limitations under the License.
150f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
160f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
170f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines#include "rsMutex.h"
180f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
190f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesusing namespace android;
200f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesusing namespace android::renderscript;
210f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
220f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
230f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen HinesMutex::Mutex() {
240f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines}
250f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
260f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen HinesMutex::~Mutex() {
270f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    pthread_mutex_destroy(&mMutex);
280f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines}
290f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
300f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesbool Mutex::init() {
310f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    int status = pthread_mutex_init(&mMutex, NULL);
320f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    if (status) {
330f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines        ALOGE("Mutex::Mutex init failure");
340f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines        return false;
350f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    }
360f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    return true;
370f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines}
380f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
390f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesbool Mutex::lock() {
400f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    int status;
410f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    status = pthread_mutex_lock(&mMutex);
420f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    if (status) {
430f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines        ALOGE("Mutex: error %i locking.", status);
440f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines        return false;
450f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    }
460f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    return true;
470f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines}
480f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
490f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesbool Mutex::unlock() {
500f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    int status;
510f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    status = pthread_mutex_unlock(&mMutex);
520f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    if (status) {
530f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines        ALOGE("Mutex error %i unlocking.", status);
540f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines        return false;
550f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    }
560f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    return true;
570f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines}
580f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
590f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
60