diff TaskManager/kernel/ppe/TaskManagerImpl.cc @ 480:46464727d825

TaskQueueInfo initiaization...
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Mon, 05 Oct 2009 12:24:07 +0900
parents 5bda98b0b56d
children 4896dffad67c
line wrap: on
line diff
--- a/TaskManager/kernel/ppe/TaskManagerImpl.cc	Mon Oct 05 10:36:37 2009 +0900
+++ b/TaskManager/kernel/ppe/TaskManagerImpl.cc	Mon Oct 05 12:24:07 2009 +0900
@@ -13,7 +13,11 @@
 }
 
 TaskManagerImpl::TaskManagerImpl(int num)
-    : machineNum(num), activeTaskQueue(NULL), waitTaskQueue(NULL) {}
+    : machineNum(num) {
+    activeTaskQueue = new TaskQueueInfo();
+    waitTaskQueue = new TaskQueueInfo();
+    taskQueueImpl = new TaskQueueInfo();
+}
 
 /**
  * 一番最初に PPE で実行される systask_start
@@ -77,7 +81,7 @@
 {
     // waiter // master
     // waitee // slave
-    if (task->wait_i == NULL) {
+    if (task->wait_i->empty()) {
         append_activeTask(task);
     } else {
         append_waitTask(task);
@@ -117,9 +121,7 @@
 void
 TaskManagerImpl::check_task_finish(HTaskPtr task)
 {
-    TaskQueue *p = task->wait_me->getFirst();
-    while(p) {
-	TaskQueue *next = p->next;
+    while(TaskQueue *p = task->wait_me->poll()) {
 	HTaskPtr htask = (HTaskPtr)p->task;
 	TaskQueueInfo *wait_i = htask->wait_i;
 	// 相手の wait queue から自分(を指しているTaskQueue)を削除
@@ -128,7 +130,6 @@
 	// queue を free する
 	wait_i->free(p->waiter);
 	wait_i->free(p);
-	p = next;
     }
 
     task->post_func(task->post_arg);
@@ -150,15 +151,11 @@
 void
 TaskManagerImpl::wakeup_waitTask(void)
 {
-    TaskQueuePtr p = waitTaskQueue->getFirst();
-    while (p) {
+    while (TaskQueuePtr p = waitTaskQueue->poll()) {
         HTaskPtr task = (HTaskPtr)p->task;
-        TaskQueue *next = p->next;
-        if (task->wait_i == NULL) {
-	    waitTaskQueue->remove(p);
+        if (task->wait_i->empty()) {
 	    activeTaskQueue->addLast(p);
         }
-	p = next;
     }
 }