Mercurial > hg > Members > innparusu > Gears
comparison src/parallel_execution/dependency.c @ 123:4ff6f093b695
Fix segmentation fault
author | Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 13 Sep 2016 11:54:25 +0900 |
parents | a086857e1812 |
children | acf0453b1c7a |
comparison
equal
deleted
inserted
replaced
122:a086857e1812 | 123:4ff6f093b695 |
---|---|
13 element->data = (union Data *)slave; | 13 element->data = (union Data *)slave; |
14 goto meta_waitFor(context, waitMeTasks, PutQueue1); | 14 goto meta_waitFor(context, waitMeTasks, PutQueue1); |
15 } | 15 } |
16 | 16 |
17 __code waitFor_stub(struct Context* context) { | 17 __code waitFor_stub(struct Context* context) { |
18 // think | 18 goto waitFor(context, |
19 &context->data[context->dataNum-1]->task, | |
20 &context->data[Element]->element, | |
21 &context->data[Node]->node.value); | |
19 } | 22 } |
20 | 23 |
21 __code meta_spawnTask(struct Context* context, struct Queue* queue, enum Code next) { | 24 __code meta_spawnTask(struct Context* context, struct Queue* queue, enum Code next) { |
22 context->data[Queue] = (union Data *)queue; | 25 context->data[Queue] = (union Data *)queue; |
23 goto (context->code[next])(context); | 26 goto (context->code[next])(context); |
78 (struct Task*)(context->data[Element]->element.data)); | 81 (struct Task*)(context->data[Element]->element.data)); |
79 } | 82 } |
80 | 83 |
81 __code add(struct Context* context, struct Integer* input1, struct Integer* input2, struct Integer* output) { | 84 __code add(struct Context* context, struct Integer* input1, struct Integer* input2, struct Integer* output) { |
82 output->value = input1->value + input2->value; | 85 output->value = input1->value + input2->value; |
86 printf("%d + %d = %d\n", input1->value, input2->value, output->value); | |
83 goto meta(context, context->next); | 87 goto meta(context, context->next); |
84 } | 88 } |
85 | 89 |
86 __code add_stub(struct Context* context) { | 90 __code add_stub(struct Context* context) { |
87 goto add(context, | 91 goto add(context, |
90 (struct Integer*)((struct Task*)(context->data[Element]->element.data))->oargs[0]); | 94 (struct Integer*)((struct Task*)(context->data[Element]->element.data))->oargs[0]); |
91 } | 95 } |
92 | 96 |
93 __code mult(struct Context* context, struct Integer* input1, struct Integer* input2, struct Integer* output) { | 97 __code mult(struct Context* context, struct Integer* input1, struct Integer* input2, struct Integer* output) { |
94 output->value = input1->value * input2->value; | 98 output->value = input1->value * input2->value; |
99 printf("%d * %d = %d\n", input1->value, input2->value, output->value); | |
95 goto meta(context, context->next); | 100 goto meta(context, context->next); |
96 } | 101 } |
97 | 102 |
98 __code mult_stub(struct Context* context) { | 103 __code mult_stub(struct Context* context) { |
99 goto mult(context, | 104 goto mult(context, |