From 1602c6de7aa85141bfbf2b9d6f6a1d4ec6c9b62c Mon Sep 17 00:00:00 2001 From: Bart van Strien Date: Sat, 3 Aug 2013 22:13:33 +0200 Subject: [PATCH] Make mutex locks slightly more safe in some places (and correct in another...) --- src/modules/thread/Channel.cpp | 19 ++++++------------- src/modules/thread/sdl/Thread.cpp | 9 +++++---- 2 files changed, 11 insertions(+), 17 deletions(-) diff --git a/src/modules/thread/Channel.cpp b/src/modules/thread/Channel.cpp index 06a0bb391..e0f3ddf55 100644 --- a/src/modules/thread/Channel.cpp +++ b/src/modules/thread/Channel.cpp @@ -125,13 +125,11 @@ void Channel::supply(Variant *var) if (!var) return; - mutex->lock(); + Lock l(mutex); unsigned long id = push(var); while (!past(id, received)) cond->wait(mutex); - - mutex->unlock(); } Variant *Channel::pop() @@ -157,11 +155,10 @@ Variant *Channel::pop() Variant *Channel::demand() { Variant *var; - mutex->lock(); + Lock l(mutex); while (!(var = pop())) cond->wait(mutex); - mutex->unlock(); return var; } @@ -218,24 +215,20 @@ void Channel::unlockMutex() void Channel::retain() { + EmptyLock l; if (named) - namedChannelMutex->lock(); + l.setLock(namedChannelMutex); Object::retain(); - - if (named) - namedChannelMutex->unlock(); } void Channel::release() { + EmptyLock l; if (named) - namedChannelMutex->lock(); + l.setLock(namedChannelMutex); Object::release(); - - if (named) - namedChannelMutex->unlock(); } } // thread } // love diff --git a/src/modules/thread/sdl/Thread.cpp b/src/modules/thread/sdl/Thread.cpp index d9adb5f91..2438ab8c6 100644 --- a/src/modules/thread/sdl/Thread.cpp +++ b/src/modules/thread/sdl/Thread.cpp @@ -58,10 +58,11 @@ bool Thread::start() void Thread::wait() { - mutex.lock(); - if (!thread) - return; - mutex.unlock(); + { + Lock l(mutex); + if (!thread) + return; + } SDL_WaitThread(thread, 0); Lock l(mutex); running = false;