Mercurial > hg > Members > innparusu > Gears
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); |