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/platform/android/android.cpp | 44 ++++++++++++++--------------------- backends/platform/android/android.h | 3 +++ 2 files changed, 20 insertions(+), 27 deletions(-) (limited to 'backends/platform/android') diff --git a/backends/platform/android/android.cpp b/backends/platform/android/android.cpp index 461b863df8..beb9516fea 100644 --- a/backends/platform/android/android.cpp +++ b/backends/platform/android/android.cpp @@ -54,6 +54,7 @@ #include "common/config-manager.h" #include "backends/keymapper/keymapper.h" +#include "backends/mutex/pthread/pthread-mutex.h" #include "backends/saves/default/default-saves.h" #include "backends/timer/default/default-timer.h" @@ -132,10 +133,11 @@ OSystem_Android::OSystem_Android(int audio_sample_rate, int audio_buffer_size) : _show_mouse(false), _show_overlay(false), _enable_zoning(false), + _mutexManager(0), _mixer(0), _shake_offset(0), _queuedEventTime(0), - _event_queue_lock(createMutex()), + _event_queue_lock(0), _touch_pt_down(), _touch_pt_scroll(), _touch_pt_dt(), @@ -180,6 +182,9 @@ OSystem_Android::~OSystem_Android() { _timerManager = 0; deleteMutex(_event_queue_lock); + + delete _mutexManager; + _mutexManager = 0; } void *OSystem_Android::timerThreadFunc(void *arg) { @@ -366,8 +371,11 @@ void OSystem_Android::initBackend() { // screen. Passing the savepath in this way makes it stick // (via ConfMan.registerDefault) _savefileManager = new DefaultSaveFileManager(ConfMan.get("savepath")); + _mutexManager = new PthreadMutexManager(); _timerManager = new DefaultTimerManager(); + _event_queue_lock = createMutex(); + gettimeofday(&_startTime, 0); _mixer = new Audio::MixerImpl(this, _audio_sample_rate); @@ -470,41 +478,23 @@ void OSystem_Android::delayMillis(uint msecs) { } OSystem::MutexRef OSystem_Android::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 0; - } - - return (MutexRef)mutex; + assert(_mutexManager); + return _mutexManager->createMutex(); } void OSystem_Android::lockMutex(MutexRef mutex) { - if (pthread_mutex_lock((pthread_mutex_t *)mutex) != 0) - warning("pthread_mutex_lock() failed"); + assert(_mutexManager); + _mutexManager->lockMutex(mutex); } void OSystem_Android::unlockMutex(MutexRef mutex) { - if (pthread_mutex_unlock((pthread_mutex_t *)mutex) != 0) - warning("pthread_mutex_unlock() failed"); + assert(_mutexManager); + _mutexManager->unlockMutex(mutex); } void OSystem_Android::deleteMutex(MutexRef mutex) { - pthread_mutex_t *m = (pthread_mutex_t *)mutex; - - if (pthread_mutex_destroy(m) != 0) - warning("pthread_mutex_destroy() failed"); - else - delete m; + assert(_mutexManager); + _mutexManager->deleteMutex(mutex); } void OSystem_Android::quit() { diff --git a/backends/platform/android/android.h b/backends/platform/android/android.h index 3b33247be1..9f91a65b55 100644 --- a/backends/platform/android/android.h +++ b/backends/platform/android/android.h @@ -96,6 +96,8 @@ extern void checkGlError(const char *expr, const char *file, int line); #define GLTHREADCHECK do { } while (false) #endif +class MutexManager; + class OSystem_Android : public EventsBaseBackend, public PaletteManager { private: // passed from the dark side @@ -145,6 +147,7 @@ private: bool _enable_zoning; bool _virtkeybd_on; + MutexManager *_mutexManager; Audio::MixerImpl *_mixer; timeval _startTime; -- cgit v1.2.3