diff src/parallel_execution/dependency.c @ 124:acf0453b1c7a

Fix meta data pointer calculate
author Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
date Tue, 27 Sep 2016 16:19:31 +0900
parents 4ff6f093b695
children 77e60b6cdace
line wrap: on
line diff
--- a/src/parallel_execution/dependency.c	Tue Sep 13 11:54:25 2016 +0900
+++ b/src/parallel_execution/dependency.c	Tue Sep 27 16:19:31 2016 +0900
@@ -9,16 +9,16 @@
 
 __code waitFor(struct Context* context, struct Task* slave, struct Element* element, union Data* data) {
     struct Integer* integer   = (struct Integer *)data;
-    struct Queue* waitMeTasks = (struct Queue *)(integer + integer-> mDataOffset);
+    struct Queue* waitMeTasks = (struct Queue *)(integer + integer-> mDataOffset / sizeof(struct Integer));
     element->data = (union Data *)slave;
     goto meta_waitFor(context, waitMeTasks, PutQueue1);
 }
 
 __code waitFor_stub(struct Context* context) {
     goto waitFor(context,
-            &context->data[context->dataNum-1]->task,
+            &context->data[context->dataNum-2]->task,
             &context->data[Element]->element,
-            &context->data[Node]->node.value);
+            context->data[Node]->node.value);
 }
 
 __code meta_spawnTask(struct Context* context, struct Queue* queue, enum Code next) {
@@ -26,7 +26,7 @@
     goto (context->code[next])(context);
 }
 
-__code spawnTask(struct Context* context, struct Task* task, struct Element* element, struct Queue* activeQueue, struct Queue* waitQueue) {
+__code spawnTask(struct Context* context, struct Task* task, struct Queue* activeQueue, struct Queue* waitQueue) {
     if (task->idsCount == 0) {
         //printf("put ActiveQueue\n");
         // enqueue activeQueue
@@ -41,7 +41,6 @@
 __code spawnTask_stub(struct Context* context) {
     goto spawnTask(context,
             (struct Task *)(context->data[Element]->element.data),
-            &context->data[Element]->element,
             &context->data[ActiveQueue]->queue,
             &context->data[WaitQueue]->queue);
 }
@@ -53,7 +52,7 @@
 
 __code checkTaskFinish1(struct Context* context, union Data* data) {
     struct Integer* integer = (struct Integer *)data;
-    struct Queue* waitMeTasks = (struct Queue *)(integer + integer->mDataOffset);
+    struct Queue* waitMeTasks = (struct Queue *)(integer + integer->mDataOffset / sizeof(struct Integer));
     context->next = CheckTaskFinish2;
     goto meta_checkTaskFinish1(context, waitMeTasks, GetQueue1);
 }
@@ -77,7 +76,7 @@
 }
 
 __code checkTaskFinish2_stub(struct Context* context) {
-    goto checkTaskFinish1(context,
+    goto checkTaskFinish2(context,
                           (struct Task*)(context->data[Element]->element.data));
 }