summaryrefslogtreecommitdiff
path: root/src/TaskMan.cc
diff options
context:
space:
mode:
authorPixel <pixel@nobis-crew.org>2011-10-09 22:58:44 -0700
committerPixel <pixel@nobis-crew.org>2011-10-09 22:58:44 -0700
commitcf9a801ebcb4df0a8b1ea75e58ca8ea8960ba13b (patch)
treed27f9bf411f2c8d222a85935dec09a2616f61681 /src/TaskMan.cc
parent4010635b9c3d74e544d37d1e9295316cff01b014 (diff)
Adding basic locks from libpthread. Also, that 'pending' loop belongs after we activate the tasks.
Diffstat (limited to 'src/TaskMan.cc')
-rw-r--r--src/TaskMan.cc27
1 files changed, 13 insertions, 14 deletions
diff --git a/src/TaskMan.cc b/src/TaskMan.cc
index a9ad709..fd0246f 100644
--- a/src/TaskMan.cc
+++ b/src/TaskMan.cc
@@ -33,21 +33,10 @@ void Balau::TaskMan::mainLoop() {
// checking "STARTING" tasks, and running them once
for (iH = m_tasks.begin(); iH != m_tasks.end(); iH++) {
t = *iH;
- if (t->getStatus() == Task::STARTING) {
+ if (t->getStatus() == Task::STARTING)
t->switchTo();
- }
}
- // lock pending
- // Adding tasks that were added, maybe from other threads
- for (iL = m_pendingAdd.begin(); iL != m_pendingAdd.end(); iL++) {
- t = *iL;
- Assert(m_tasks.find(t) == m_tasks.end());
- m_tasks.insert(t);
- }
- m_pendingAdd.clear();
- // unlock pending
-
ev_run(m_loop, EVRUN_ONCE);
// let's check who got signaled, and call them
@@ -56,6 +45,16 @@ void Balau::TaskMan::mainLoop() {
t->switchTo();
}
+ m_pendingLock.enter();
+ // Adding tasks that were added, maybe from other threads
+ for (iL = m_pendingAdd.begin(); iL != m_pendingAdd.end(); iL++) {
+ t = *iL;
+ Assert(m_tasks.find(t) == m_tasks.end());
+ m_tasks.insert(t);
+ }
+ m_pendingAdd.clear();
+ m_pendingLock.leave();
+
// Dealing with stopped and faulted tasks.
// First by signalling the waiters.
for (iH = m_tasks.begin(); iH != m_tasks.end(); iH++) {
@@ -93,9 +92,9 @@ void Balau::TaskMan::mainLoop() {
}
void Balau::TaskMan::registerTask(Balau::Task * t) {
- // lock pending
+ m_pendingLock.enter();
m_pendingAdd.push_back(t);
- // unlock pending
+ m_pendingLock.leave();
}
void Balau::TaskMan::signalTask(Task * t) {