From 953a4572e09a05dab4487b75eeb1f267b9e22c3a Mon Sep 17 00:00:00 2001 From: Pixel Date: Fri, 14 Oct 2011 21:55:56 -0700 Subject: Fixing a few bugs. -) The IO class needed an assignment operator, as well as the ability to NOT contain a Handle. -) The Task Manager wasn't properly starting up pending tasks that got added during startup. --- src/Task.cc | 1 - src/TaskMan.cc | 14 +++++++++----- 2 files changed, 9 insertions(+), 6 deletions(-) (limited to 'src') diff --git a/src/Task.cc b/src/Task.cc index d31f4e0..771063e 100644 --- a/src/Task.cc +++ b/src/Task.cc @@ -52,7 +52,6 @@ void Balau::Task::coroutine(void * arg) { } void Balau::Task::switchTo() { - m_status = RUNNING; void * oldTLS = g_tlsManager->getTLS(); g_tlsManager->setTLS(m_tls); coro_transfer(&m_taskMan->m_returnContext, &m_ctx); diff --git a/src/TaskMan.cc b/src/TaskMan.cc index 3b715ce..5a0c1c1 100644 --- a/src/TaskMan.cc +++ b/src/TaskMan.cc @@ -48,17 +48,21 @@ void Balau::TaskMan::mainLoop() { // checking "STARTING" tasks, and running them once; also try to build the status of the noWait boolean. for (iH = m_tasks.begin(); iH != m_tasks.end(); iH++) { t = *iH; - if (t->getStatus() == Task::STARTING) { + if (t->getStatus() == Task::STARTING) t->switchTo(); - if ((t->getStatus() == Task::STOPPED) || (t->getStatus() == Task::FAULTED)) - noWait = true; - } + if ((t->getStatus() == Task::STOPPED) || (t->getStatus() == Task::FAULTED)) + noWait = true; } // probably means we have pending tasks; or none at all, for some reason. Don't wait on it forever. - if (!noWait && m_tasks.size() == 0) + if (m_tasks.size() == 0) noWait = true; + m_pendingLock.enter(); + if (m_pendingAdd.size() != 0) + noWait = true; + m_pendingLock.leave(); + // libev's event "loop". We always runs it once though. ev_run(m_loop, noWait ? EVRUN_NOWAIT : EVRUN_ONCE); -- cgit v1.2.3