From 7e44034757a1ef07c511ec99473a1e330e8f4072 Mon Sep 17 00:00:00 2001 From: Bart van Strien Date: Mon, 6 Jul 2015 11:58:08 +0200 Subject: [PATCH] Add a MutexRef class to clean up Mutex handling code --- src/modules/audio/openal/Audio.cpp | 2 -- src/modules/audio/openal/Audio.h | 2 +- src/modules/audio/openal/Pool.cpp | 6 ------ src/modules/audio/openal/Pool.h | 2 +- src/modules/event/Event.cpp | 6 ------ src/modules/event/Event.h | 3 +-- src/modules/image/ImageData.cpp | 2 -- src/modules/image/ImageData.h | 2 +- src/modules/thread/threads.cpp | 15 +++++++++++++++ src/modules/thread/threads.h | 12 ++++++++++++ 10 files changed, 31 insertions(+), 21 deletions(-) diff --git a/src/modules/audio/openal/Audio.cpp b/src/modules/audio/openal/Audio.cpp index 8536f6d4e..99ad86bf9 100644 --- a/src/modules/audio/openal/Audio.cpp +++ b/src/modules/audio/openal/Audio.cpp @@ -36,13 +36,11 @@ Audio::PoolThread::PoolThread(Pool *pool) : pool(pool) , finish(false) { - mutex = thread::newMutex(); threadName = "AudioPool"; } Audio::PoolThread::~PoolThread() { - delete mutex; } diff --git a/src/modules/audio/openal/Audio.h b/src/modules/audio/openal/Audio.h index 4cd2b48f9..bd6e69426 100644 --- a/src/modules/audio/openal/Audio.h +++ b/src/modules/audio/openal/Audio.h @@ -126,7 +126,7 @@ private: volatile bool finish; // finish lock - thread::Mutex *mutex; + love::thread::MutexRef mutex; public: PoolThread(Pool *pool); diff --git a/src/modules/audio/openal/Pool.cpp b/src/modules/audio/openal/Pool.cpp index bec0d8c12..a1018f550 100644 --- a/src/modules/audio/openal/Pool.cpp +++ b/src/modules/audio/openal/Pool.cpp @@ -32,7 +32,6 @@ namespace openal Pool::Pool() : sources() , totalSources(0) - , mutex(nullptr) { // Clear errors. alGetError(); @@ -53,9 +52,6 @@ Pool::Pool() if (totalSources < 4) throw love::Exception("Could not generate sources."); - // Create the mutex. - mutex = thread::newMutex(); - #ifdef AL_SOFT_direct_channels ALboolean hasext = alIsExtensionPresent("AL_SOFT_direct_channels"); #endif @@ -79,8 +75,6 @@ Pool::~Pool() { stop(); - delete mutex; - // Free all sources. alDeleteSources(totalSources, sources); } diff --git a/src/modules/audio/openal/Pool.h b/src/modules/audio/openal/Pool.h index eccf59c79..e875b4f55 100644 --- a/src/modules/audio/openal/Pool.h +++ b/src/modules/audio/openal/Pool.h @@ -124,7 +124,7 @@ private: // Only one thread can access this object at the same time. This mutex will // make sure of that. - thread::Mutex *mutex; + love::thread::MutexRef mutex; }; // Pool diff --git a/src/modules/event/Event.cpp b/src/modules/event/Event.cpp index 518f1f82f..92d416da6 100644 --- a/src/modules/event/Event.cpp +++ b/src/modules/event/Event.cpp @@ -81,14 +81,8 @@ Message *Message::fromLua(lua_State *L, int n) return new Message(name, vargs); } -Event::Event() -{ - mutex = thread::newMutex(); -} - Event::~Event() { - delete mutex; } void Event::push(Message *msg) diff --git a/src/modules/event/Event.h b/src/modules/event/Event.h index 47b539b7a..35073d4ba 100644 --- a/src/modules/event/Event.h +++ b/src/modules/event/Event.h @@ -59,7 +59,6 @@ private: class Event : public Module { public: - Event(); virtual ~Event(); // Implements Module. @@ -73,7 +72,7 @@ public: virtual Message *wait() = 0; protected: - thread::Mutex *mutex; + love::thread::MutexRef mutex; std::queue queue; }; // Event diff --git a/src/modules/image/ImageData.cpp b/src/modules/image/ImageData.cpp index 2ccbd3a73..841dea7a0 100644 --- a/src/modules/image/ImageData.cpp +++ b/src/modules/image/ImageData.cpp @@ -30,12 +30,10 @@ namespace image ImageData::ImageData() : data(nullptr) { - mutex = thread::newMutex(); } ImageData::~ImageData() { - delete mutex; } size_t ImageData::getSize() const diff --git a/src/modules/image/ImageData.h b/src/modules/image/ImageData.h index bd31581e3..9626f4584 100644 --- a/src/modules/image/ImageData.h +++ b/src/modules/image/ImageData.h @@ -146,7 +146,7 @@ protected: // We need to be thread-safe // so we lock when we're accessing our // data - Mutex *mutex; + love::thread::MutexRef mutex; private: diff --git a/src/modules/thread/threads.cpp b/src/modules/thread/threads.cpp index 86bd1fcf4..fc97bc0d1 100644 --- a/src/modules/thread/threads.cpp +++ b/src/modules/thread/threads.cpp @@ -104,5 +104,20 @@ const char *Threadable::getThreadName() const return threadName.empty() ? nullptr : threadName.c_str(); } +MutexRef::MutexRef() + : mutex(newMutex()) +{ +} + +MutexRef::~MutexRef() +{ + delete mutex; +} + +MutexRef::operator Mutex*() const +{ + return mutex; +} + } // thread } // love diff --git a/src/modules/thread/threads.h b/src/modules/thread/threads.h index 87f434d51..85bdba394 100644 --- a/src/modules/thread/threads.h +++ b/src/modules/thread/threads.h @@ -96,6 +96,18 @@ protected: }; +class MutexRef +{ +public: + MutexRef(); + ~MutexRef(); + + operator Mutex*() const; + +private: + Mutex *mutex; +}; + Mutex *newMutex(); Conditional *newConditional(); Thread *newThread(Threadable *t);