diff src/modules/thread/Channel.cpp @ 1101:025c67973ad4 minor

Make Channels more thread-safe (I know, I know..)
author Bart van Strien <bart.bes+projects@gmail.com>
date Wed, 04 Jul 2012 20:22:54 +0200
parents a74672ba1320
children fc7143cc0818
line wrap: on
line diff
--- a/src/modules/thread/Channel.cpp	Wed Jul 04 17:15:16 2012 +0200
+++ b/src/modules/thread/Channel.cpp	Wed Jul 04 20:22:54 2012 +0200
@@ -65,10 +65,7 @@
 		delete mutex;
 		delete cond;
 		if (named)
-		{
-			Lock l(namedChannelMutex);
 			namedChannels.erase(name);
-		}
 	}
 
 	void Channel::push(Variant *var)
@@ -133,6 +130,11 @@
 	void Channel::clear()
 	{
 		Lock l(mutex);
+
+		// We're already empty.
+		if (queue.empty())
+			return;
+
 		while (!queue.empty())
 		{
 			queue.front()->release();
@@ -144,5 +146,16 @@
 		if (named)
 			release();
 	}
+
+	void Channel::release()
+	{
+		if (named)
+			namedChannelMutex->lock();
+
+		Object::release();
+
+		if (named)
+			namedChannelMutex->unlock();
+	}
 } // thread
 } // love