diff TaskManager/kernel/ppe/TaskManagerImpl.cc @ 497:9d225ba0c34f

no wakeup loop
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Sat, 10 Oct 2009 21:05:55 +0900
parents 58240647b23b
children cb5ecfc5aaa3
line wrap: on
line diff
--- a/TaskManager/kernel/ppe/TaskManagerImpl.cc	Sat Oct 10 20:32:55 2009 +0900
+++ b/TaskManager/kernel/ppe/TaskManagerImpl.cc	Sat Oct 10 21:05:55 2009 +0900
@@ -120,21 +120,26 @@
  * @param [task] 終了したタスク
  */
 void
-TaskManagerImpl::check_task_finish(HTaskPtr task)
+TaskManagerImpl::check_task_finish(HTaskPtr me)
 {
-    while(TaskQueue *p = task->wait_me->poll()) {
-	HTaskPtr htask = (HTaskPtr)p->task;
-	TaskQueueInfo *wait_i = htask->wait_i;
+    while(TaskQueue *p = me->wait_me->poll()) {
+	HTaskPtr you = (HTaskPtr)p->task;
+	TaskQueueInfo *wait_i = you->wait_i;
 	// 相手の wait queue から自分(を指しているTaskQueue)を削除
 	wait_i->remove(p->waiter);
 	// queue を free する
 	wait_i->free_(p->waiter);
 
+	if (wait_i->empty()) {
+	    waitTaskQueue->remove(you->self);
+	    append_activeTask(you->self);
+	}
+
 	wait_i->free_(p);
     }
 
-    task->post_func(task->post_arg);
-    htaskImpl->free(task);
+    me->post_func(me->post_arg);
+    htaskImpl->free(me);
 }
 
 
@@ -151,18 +156,7 @@
 void
 TaskManagerImpl::wakeup_waitTask(void)
 {
-    
-    for(TaskQueuePtr p = waitTaskQueue->getFirst(); p;) {
-        HTaskPtr task = (HTaskPtr)p->task;
-        if (task->wait_i->empty()) {
-	    TaskQueuePtr next = waitTaskQueue->getNext(p);
-	    waitTaskQueue->remove(p);
-	    append_activeTask(p);
-	    p = next;
-        } else {
-	    p = waitTaskQueue->getNext(p);
-	}
-    }
+  // done in check_task_finish   
 }
 
 /* end */