Browse Source

Add a MutexRef class to clean up Mutex handling code

Bart van Strien 10 years ago
parent
commit
7e44034757

+ 0 - 2
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;
 }
 
 

+ 1 - 1
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);

+ 0 - 6
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);
 }

+ 1 - 1
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
 

+ 0 - 6
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)

+ 1 - 2
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<Message *> queue;
 
 }; // Event

+ 0 - 2
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

+ 1 - 1
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:
 

+ 15 - 0
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

+ 12 - 0
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);