comparison src/parallel_execution/worker.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 77e60b6cdace
comparison
equal deleted inserted replaced
122:a086857e1812 123:4ff6f093b695
14 14
15 __code getQueue1(struct Context* context, struct Queue* queue, struct Element* element) { 15 __code getQueue1(struct Context* context, struct Queue* queue, struct Element* element) {
16 if (queue->first == 0) 16 if (queue->first == 0)
17 return; 17 return;
18 18
19 element = queue->first; 19 element->data = queue->first->data;
20 if (__sync_bool_compare_and_swap(&queue->first, element, element->next)) { 20 if (__sync_bool_compare_and_swap(&queue->first, queue->first, queue->first->next)) {
21 queue->count--; 21 queue->count--;
22 goto meta(context, context->next); 22 goto meta(context, context->next);
23 } else { 23 } else {
24 goto meta(context, GetQueue1); 24 goto meta(context, GetQueue1);
25 } 25 }
29 goto getQueue1(context, &context->data[Queue]->queue, &context->data[Element]->element); 29 goto getQueue1(context, &context->data[Queue]->queue, &context->data[Element]->element);
30 } 30 }
31 31
32 __code getInputData1(struct Context* context, struct Task* task, struct Node* node, struct LoopCounter* loopCounter) { 32 __code getInputData1(struct Context* context, struct Task* task, struct Node* node, struct LoopCounter* loopCounter) {
33 int i = loopCounter->i; 33 int i = loopCounter->i;
34 if(i < sizeof(task->iKeys)/ sizeof(int)) { 34 if(i < sizeof(task->iKeys) / sizeof(int)) {
35 context->next = GetInputData2; 35 context->next = GetInputData2;
36 node->key = task->iKeys[i]; 36 node->key = task->iKeys[i];
37 struct Traverse *t = &context->data[Traverse]->traverse; 37 struct Traverse *t = &context->data[Traverse]->traverse;
38 t->next = GetQueue1; 38 t->next = GetQueue1;
39 goto meta(context, Get); 39 goto meta(context, Get);