diff options
author | Cameron Cawley | 2019-04-10 23:16:49 +0100 |
---|---|---|
committer | Filippos Karapetis | 2019-04-20 15:53:56 +0300 |
commit | 5d7cd526e84d903f34e5ef73f9f33f6a7c5c4736 (patch) | |
tree | 6d94ab4e07fa93896a1c25736413ee77194c3cdf /backends/mutex | |
parent | d1826ca48ea78c6c04c9fb1f22d3187bdfcf28ea (diff) | |
download | scummvm-rg350-5d7cd526e84d903f34e5ef73f9f33f6a7c5c4736.tar.gz scummvm-rg350-5d7cd526e84d903f34e5ef73f9f33f6a7c5c4736.tar.bz2 scummvm-rg350-5d7cd526e84d903f34e5ef73f9f33f6a7c5c4736.zip |
ANDROID: Add a pthreads-based mutex manager
Diffstat (limited to 'backends/mutex')
-rw-r--r-- | backends/mutex/pthread/pthread-mutex.cpp | 70 | ||||
-rw-r--r-- | backends/mutex/pthread/pthread-mutex.h | 40 |
2 files changed, 110 insertions, 0 deletions
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 <pthread.h> + + +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 |