From 37221dc091725c6fea09181b845308ab8f26c795 Mon Sep 17 00:00:00 2001 From: Pixel Date: Tue, 3 Apr 2012 08:46:21 -0700 Subject: Reworking a bit the way the queues are working, and thus, the way the LuaTMainTask queue works. --- src/LuaTask.cc | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) (limited to 'src/LuaTask.cc') diff --git a/src/LuaTask.cc b/src/LuaTask.cc index 9a7e978..acf63b5 100644 --- a/src/LuaTask.cc +++ b/src/LuaTask.cc @@ -2,6 +2,10 @@ #include "Main.h" #include "TaskMan.h" +class LuaTaskDummy : public Balau::LuaExecCell { + virtual void run(Balau::Lua &) { } +}; + Balau::LuaMainTask::LuaMainTask() : m_stopping(false) { L.open_base(); L.open_table(); @@ -12,25 +16,29 @@ Balau::LuaMainTask::LuaMainTask() : m_stopping(false) { L.open_jit(); } +Balau::LuaMainTask::~LuaMainTask() { + L.close(); +} + void Balau::LuaMainTask::exec(LuaExecCell * cell) { m_queue.push(cell); - m_queueEvent.trigger(); } void Balau::LuaMainTask::stop() { Atomic::CmpXChgVal(&m_stopping, true, false); - m_queueEvent.trigger(); + exec(new LuaTaskDummy()); } void Balau::LuaMainTask::Do() { while (!m_stopping) { - waitFor(&m_queueEvent); - LuaExecCell * cell; - while ((cell = m_queue.pop(false))) - createTask(new LuaTask(L.thread(), cell), this); - - yield(); + while ((cell = m_queue.pop(false))) { + if (dynamic_cast(cell)) { + delete cell; + break; + } + TaskMan::createTask(new LuaTask(L.thread(), cell), this); + } } } -- cgit v1.2.3