diff TaskManager/Cell/CellTaskManagerImpl.cc @ 704:6d497c098455

Compatibility mode works.
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Mon, 14 Dec 2009 19:54:00 +0900
parents 3b6290c05f9f
children f725c6455d19
line wrap: on
line diff
--- a/TaskManager/Cell/CellTaskManagerImpl.cc	Mon Dec 14 18:34:46 2009 +0900
+++ b/TaskManager/Cell/CellTaskManagerImpl.cc	Mon Dec 14 19:54:00 2009 +0900
@@ -90,10 +90,12 @@
 void
 CellTaskManagerImpl::set_runTaskList()
 {
-    // ここ...直すかな
     TaskListPtr list;
-    
+#ifdef SIMPLE_TASK
+    SimpleTaskPtr task;
+#else
     TaskPtr task;
+#endif
     int speid;
 
     while (HTaskPtr htask = activeTaskQueue->poll()) {
@@ -128,8 +130,33 @@
 	}
 
 	task = &list->tasks[list->length++];
+#ifdef SIMPLE_TASK
+        if (htask->command==TaskArray1) {
+            // compatibility
+	    // Task with ListData is stored in the ListData
+            int next = (htask->r_size+sizeof(SimpleTask))/sizeof(SimpleTask);
+            if (list->length+next>=TASK_MAX_SIZE) {
+                list->length--;
+                TaskListPtr newList = taskListImpl->create();
+		newList = TaskListInfo::append(newList, speTaskList_bg[speid]);
+		speTaskList_bg[speid] = newList;
+                list = newList; 
+                task = &list->tasks[list->length++];
+            }
+            Task *array = (Task*)&list->tasks[list->length];
+            list->length += next;
+            memcpy(array, htask->rbuf, htask->r_size);
+            free(htask->rbuf);
+            htask->rbuf = 0; htask->r_size = 0;
+            *task = *(SimpleTask*)htask;
+        } else {
+	    *task = *(SimpleTask*)htask;
+        }
+#else
 	TaskPtr stask = (TaskPtr) task;
 	*stask = *(TaskPtr) htask;
+#endif
+
     }
 }