summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/Task.cc4
-rw-r--r--lib/TaskMan.cc12
2 files changed, 15 insertions, 1 deletions
diff --git a/lib/Task.cc b/lib/Task.cc
index 2c8f048..c50a6e7 100644
--- a/lib/Task.cc
+++ b/lib/Task.cc
@@ -84,3 +84,7 @@ bool Task::IsStopped() {
Task * Task::WaitedBy() {
return wbta;
}
+
+void Task::RemoveFromWatches() {
+ wbta = 0;
+}
diff --git a/lib/TaskMan.cc b/lib/TaskMan.cc
index 5b29d1c..c688f8a 100644
--- a/lib/TaskMan.cc
+++ b/lib/TaskMan.cc
@@ -115,6 +115,16 @@ void TaskMan::RemoveFromWatches(Task * t) {
p--;
}
}
+
+ for (TaskList_t::iterator p = TaskList.begin(); p && (p != TaskList.end()); p++) {
+ if ((*p)->WaitedBy() == t) {
+ Zombies.push_back(*p);
+ (*p)->RemoveFromWatches();
+ TaskList.erase(p);
+ number--;
+ p--;
+ }
+ }
}
void TaskMan::WaitFor(Handle * h, Task * t, int flags) {
@@ -328,7 +338,7 @@ void TaskMan::MainLoop() throw (GeneralException) {
if (o->GetState() == TASK_DONE) {
TaskList_t::iterator f = FindTask(o);
if (!f) {
- throw GeneralException(_("TaskMan: internal error (task not found)"));
+ throw GeneralException(_("TaskMan: internal error (task not found) -- SHOULD NOT HAPPEN!!"));
}
TaskList.erase(f);
number--;