From d3826aba9d3fc9687d36b3ad3c5601643732f849 Mon Sep 17 00:00:00 2001 From: Alex Szpakowski Date: Fri, 30 Aug 2013 17:34:58 -0300 Subject: [PATCH] Improved thread safety of love.event.wait and love.event.push --- src/modules/event/sdl/wrap_Event.cpp | 4 ++-- src/modules/thread/threads.cpp | 9 +++++---- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/modules/event/sdl/wrap_Event.cpp b/src/modules/event/sdl/wrap_Event.cpp index 551eaf1f6..bcceba015 100644 --- a/src/modules/event/sdl/wrap_Event.cpp +++ b/src/modules/event/sdl/wrap_Event.cpp @@ -64,7 +64,7 @@ int w_poll(lua_State *L) int w_wait(lua_State *L) { - static Message *m; + Message *m; if ((m = instance->wait())) { @@ -78,7 +78,7 @@ int w_wait(lua_State *L) int w_push(lua_State *L) { - static Message *m; + Message *m; bool success = (m = Message::fromLua(L, 1)) != NULL; luax_pushboolean(L, success); diff --git a/src/modules/thread/threads.cpp b/src/modules/thread/threads.cpp index a333dd631..692ce2926 100644 --- a/src/modules/thread/threads.cpp +++ b/src/modules/thread/threads.cpp @@ -55,22 +55,23 @@ EmptyLock::~EmptyLock() void EmptyLock::setLock(Mutex *m) { + if (m) + m->lock(); + if (mutex) mutex->unlock(); mutex = m; - - if (mutex) - mutex->lock(); } void EmptyLock::setLock(Mutex &m) { + m.lock(); + if (mutex) mutex->unlock(); mutex = &m; - mutex->lock(); } Threadable::Threadable()