From 953a4572e09a05dab4487b75eeb1f267b9e22c3a Mon Sep 17 00:00:00 2001
From: Pixel <pixel@nobis-crew.org>
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