From 5d7cd526e84d903f34e5ef73f9f33f6a7c5c4736 Mon Sep 17 00:00:00 2001 From: Cameron Cawley Date: Wed, 10 Apr 2019 23:16:49 +0100 Subject: ANDROID: Add a pthreads-based mutex manager --- backends/mutex/pthread/pthread-mutex.cpp | 70 ++++++++++++++++++++++++++++++++ backends/mutex/pthread/pthread-mutex.h | 40 ++++++++++++++++++ 2 files changed, 110 insertions(+) create mode 100644 backends/mutex/pthread/pthread-mutex.cpp create mode 100644 backends/mutex/pthread/pthread-mutex.h (limited to 'backends/mutex/pthread') diff --git a/backends/mutex/pthread/pthread-mutex.cpp b/backends/mutex/pthread/pthread-mutex.cpp new file mode 100644 index 0000000000..e82d7db2b7 --- /dev/null +++ b/backends/mutex/pthread/pthread-mutex.cpp @@ -0,0 +1,70 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#define FORBIDDEN_SYMBOL_EXCEPTION_time_h + +#include "common/scummsys.h" + +#if defined(__ANDROID__) || defined(IPHONE) + +#include "backends/mutex/pthread/pthread-mutex.h" + +#include + + +OSystem::MutexRef PthreadMutexManager::createMutex() { + pthread_mutexattr_t attr; + + pthread_mutexattr_init(&attr); + pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE); + + pthread_mutex_t *mutex = new pthread_mutex_t; + + if (pthread_mutex_init(mutex, &attr) != 0) { + warning("pthread_mutex_init() failed"); + delete mutex; + return NULL; + } + + return (OSystem::MutexRef)mutex; +} + +void PthreadMutexManager::lockMutex(OSystem::MutexRef mutex) { + if (pthread_mutex_lock((pthread_mutex_t *)mutex) != 0) + warning("pthread_mutex_lock() failed"); +} + +void PthreadMutexManager::unlockMutex(OSystem::MutexRef mutex) { + if (pthread_mutex_unlock((pthread_mutex_t *)mutex) != 0) + warning("pthread_mutex_unlock() failed"); +} + +void PthreadMutexManager::deleteMutex(OSystem::MutexRef mutex) { + pthread_mutex_t *m = (pthread_mutex_t *)mutex; + + if (pthread_mutex_destroy(m) != 0) + warning("pthread_mutex_destroy() failed"); + else + delete m; +} + +#endif diff --git a/backends/mutex/pthread/pthread-mutex.h b/backends/mutex/pthread/pthread-mutex.h new file mode 100644 index 0000000000..b3a73b2968 --- /dev/null +++ b/backends/mutex/pthread/pthread-mutex.h @@ -0,0 +1,40 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#ifndef BACKENDS_MUTEX_PTHREAD_H +#define BACKENDS_MUTEX_PTHREAD_H + +#include "backends/mutex/mutex.h" + +/** + * pthreads mutex manager + */ +class PthreadMutexManager : public MutexManager { +public: + virtual OSystem::MutexRef createMutex(); + virtual void lockMutex(OSystem::MutexRef mutex); + virtual void unlockMutex(OSystem::MutexRef mutex); + virtual void deleteMutex(OSystem::MutexRef mutex); +}; + + +#endif -- cgit v1.2.3