From 532f3e7bae955f8da4c2028bc462134ed10ff414 Mon Sep 17 00:00:00 2001 From: Pixel Date: Tue, 3 Apr 2012 09:30:58 -0700 Subject: Slightly more change to the Queue system, so Debug mode doesn't freak pout. --- src/LuaTask.cc | 2 +- src/Task.cc | 20 +++++++++++--------- 2 files changed, 12 insertions(+), 10 deletions(-) (limited to 'src') diff --git a/src/LuaTask.cc b/src/LuaTask.cc index acf63b5..80a56f6 100644 --- a/src/LuaTask.cc +++ b/src/LuaTask.cc @@ -32,7 +32,7 @@ void Balau::LuaMainTask::stop() { void Balau::LuaMainTask::Do() { while (!m_stopping) { LuaExecCell * cell; - while ((cell = m_queue.pop(false))) { + while ((cell = m_queue.pop())) { if (dynamic_cast(cell)) { delete cell; break; diff --git a/src/Task.cc b/src/Task.cc index 1486540..644e302 100644 --- a/src/Task.cc +++ b/src/Task.cc @@ -235,7 +235,7 @@ void Balau::Task::yield(Events::BaseEvent * evt, bool interruptible) throw (Gene } } -void Balau::QueueBase::iPush(void * t) { +void Balau::QueueBase::iPush(void * t, Events::Async * event) { ScopeLock sl(m_lock); Cell * c = new Cell(t); c->m_prev = m_back; @@ -244,20 +244,22 @@ void Balau::QueueBase::iPush(void * t) { else m_front = c; m_back = c; - pthread_cond_signal(&m_cond); - m_event.trigger(); + if (event) + event->trigger(); + else + pthread_cond_signal(&m_cond); } -void * Balau::QueueBase::iPop(bool wait) { +void * Balau::QueueBase::iPop(Events::Async * event) { ScopeLock sl(m_lock); while (!m_front) { - if (wait) { - pthread_cond_wait(&m_cond, &m_lock.m_lock); - } else { - Task::prepare(&m_event); + if (event) { + Task::prepare(event); m_lock.leave(); - Task::yield(&m_event); + Task::yield(event); m_lock.enter(); + } else { + pthread_cond_wait(&m_cond, &m_lock.m_lock); } } Cell * c = m_front; -- cgit v1.2.3