Mercurial > hg > Gears > Gears
annotate src/parallel_execution/DebugWorker/DebugWorker.cbc @ 1015:e6778c866876
add DebugWorker and DebugTaskManager
author | Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 18 Jan 2022 19:54:28 +0900 |
parents | |
children | 3e8d89f271e2 |
rev | line source |
---|---|
1015
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
1 #include "../../context.h" |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
2 #include <stdio.h> |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
3 #include <stdlib.h> |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
4 #include <time.h> |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
5 #include "../../DebugWorker/state_db.h" |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
6 |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
7 #interface "TaskManager.h" |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
8 #interface "Worker.h" |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
9 #interface "Iterator.h" |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
10 #interface "Queue.h" |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
11 |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
12 |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
13 static void startWorker(Worker* worker); |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
14 |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
15 #define INPUT_BUFFER_SIZE 256 |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
16 #define NUM_OF_COMMAND 2 |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
17 |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
18 // workerの作成、初期化、スレッド作成 |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
19 Worker* createDebugWorker(struct Context* context, int id, Queue* queue) { |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
20 printf("[Debug log] createDebugWorker in DebugWorker\n"); |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
21 struct Worker* worker = new Worker(); |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
22 struct DebugWorker* debugWorker = new DebugWorker(); |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
23 worker->worker = (union Data*)debugWorker; |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
24 worker->tasks = queue; |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
25 debugWorker->id = id; |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
26 |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
27 // debugWorker->depth = 0; |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
28 // debugWorker->count = 0; |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
29 // debugWorker->change = 0; |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
30 // debugWorker->debugContext = NULL; |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
31 // debugWorker->masterContext = context; //singleton |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
32 |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
33 debugWorker->loopCounter = 0; |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
34 debugWorker->taskManager = context->taskManager; |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
35 worker->taskReceive = C_taskReceiveDebugWorker; |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
36 worker->shutdown = C_shutdownDebugWorker; |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
37 pthread_create(&worker->thread, NULL, (void*)&startWorker, worker); |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
38 return worker; |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
39 } |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
40 |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
41 // スレッド用Contextの作成 |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
42 static void startWorker(struct Worker* worker) { |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
43 printf("[Debug log] startWorker in DebugWorker\n"); |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
44 struct DebugWorker* debugWorker = &worker->worker->DebugWorker; |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
45 debugWorker->context = NEW(struct Context); |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
46 initContext(debugWorker->context); |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
47 debugWorker->context->worker = worker; |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
48 Gearef(debugWorker->context, Worker)->worker = (union Data*)worker; |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
49 Gearef(debugWorker->context, Worker)->tasks = worker->tasks; |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
50 printf("[Debug log] finished startWorker in DebugWorker\n"); |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
51 goto meta(debugWorker->context, worker->taskReceive); |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
52 } |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
53 |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
54 // task Queueからtaskの取得 |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
55 __code taskReceiveDebugWorker(struct DebugWorker* worker, struct Queue* tasks) { |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
56 printf("[Debug log] taskReceiveDebugWorker in debug worker\n"); |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
57 goto tasks->take(getTaskDebugWorker); |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
58 } |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
59 |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
60 // extern int visit_StateDB(StateDB s, StateDB *parent, StateDB* out, int visit); |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
61 |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
62 __ncode printDataGear(struct Context* context, enum Code next, char *dataGear_name) { |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
63 context->next = next; // remember next Code |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
64 |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
65 if (strcmp(dataGear_name, "Context") == 0) { |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
66 printf("DataGear Name: %s\n", dataGear_name); |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
67 printf("next CodeGear: %i\n", context->next); |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
68 // printf("Worker: %i\n", context->worker); |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
69 |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
70 } else if (strcmp(dataGear_name, "Phils") == 0) { |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
71 printf("DataGear Name: %s\n", dataGear_name); |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
72 printf("DataGear Address: %p\n", context->data); |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
73 printf("Phils Address: %p\n", Gearef(context, Phils)); |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
74 printf("putdown_rfork: %i\n", Gearef(context, Phils)->putdown_rfork); |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
75 printf("thinking: %i\n", Gearef(context, Phils)->thinking); |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
76 printf("pickup_lfork: %i\n", Gearef(context, Phils)->pickup_lfork); |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
77 printf("pickup_rfork: %i\n", Gearef(context, Phils)->pickup_rfork); |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
78 printf("eating: %i\n", Gearef(context, Phils)->eating); |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
79 printf("next: %i\n", Gearef(context, Phils)->next); |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
80 } else { |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
81 printf("invalid options. Please enter correct DataGear name option.\n"); |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
82 } |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
83 goto debugMeta(context, context->next); |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
84 } |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
85 |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
86 __ncode debugMeta(struct Context* context, enum Code next) { |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
87 printf("[Debug log] debugMeta in DebugWorker\n"); |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
88 context->next = next; // remember next Code Gear |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
89 printf("start get debugWorker\n"); |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
90 struct DebugWorker* debugWorker = (struct DebugWorker*) Gearef(context, Worker); |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
91 // struct DebugWorker* debugWorker = (struct DebugWorker*) context->worker->worker; |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
92 printf("finish get debugWorker\n"); |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
93 StateNode st; |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
94 StateDB out = &st; |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
95 struct Element* list = NULL; |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
96 struct DebugTaskManagerImpl* debugTaskManagerImpl = (struct DebugTaskManagerImpl *)debugWorker->taskManager->taskManager; |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
97 out->memory = debugTaskManagerImpl->mem; |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
98 out->hash = get_memory_hash(debugTaskManagerImpl->mem,0); |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
99 // debugTaskManagerImpl->statefunc(debugTaskManagerImpl, debugWorker, debugWorker->parent, out, debugWorker->checking); |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
100 |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
101 char command_arr[NUM_OF_COMMAND][INPUT_BUFFER_SIZE]; |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
102 |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
103 while(1) { |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
104 printf("\n(Gears Debugger) "); |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
105 // ユーザーインプット処理 |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
106 int i=0; |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
107 char user_input[INPUT_BUFFER_SIZE], *command; |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
108 |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
109 fgets(user_input, sizeof(user_input), stdin); |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
110 command = strtok(user_input, " \n"); |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
111 |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
112 while (command != NULL) { |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
113 strcpy(command_arr[i], command); |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
114 command = strtok(NULL, " \n"); |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
115 i++; |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
116 } |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
117 |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
118 // checking for input |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
119 for (i = 0; i < NUM_OF_COMMAND; i++) { |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
120 printf("command_arr[%d] : %s\n", i, command_arr[i]); |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
121 } |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
122 |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
123 // next |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
124 // nextする前にstateDBへ保存する処理を書きたい |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
125 if (strcmp(command_arr[0], "next") == 0 || strcmp(command_arr[0], "n") == 0) { |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
126 dump_memory(debugTaskManagerImpl->mem); |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
127 // printf(" flag %0x %p -> %p hash %0x \n", out->flag, debugWorker->parent, out, out->hash); |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
128 goto meta(context, context->next); |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
129 // quit |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
130 } else if (strcmp(command_arr[0], "quit") == 0 || strcmp(command_arr[0], "q") == 0) { |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
131 printf("quit program\n"); |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
132 exit(0); |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
133 // help |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
134 } else if (strcmp(command_arr[0], "help") == 0 || strcmp(command_arr[0], "h") == 0){ |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
135 printf("Debugger commands:\n"); |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
136 printf("next, n:\t Go next step.\n"); |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
137 printf("help, h:\t Show a list of all debugger commands\n"); |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
138 printf("quit, q:\t Quit program.\n"); |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
139 printf("pd:\t\t Show DataGear. Specify the datagear name. ex) pd Phils\n"); |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
140 // pd(print DataGear) |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
141 } else if (strcmp(command_arr[0], "pd") == 0){ |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
142 goto printDataGear(context, context->next, &command_arr[1]); |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
143 //others |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
144 } else { |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
145 printf("invalid input. Please enter correct debugger commands.\n"); |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
146 } |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
147 } |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
148 } |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
149 |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
150 __code getTaskDebugWorker(struct DebugWorker* debugWorker, struct Context* task, struct Worker* worker) { |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
151 printf("[Debug log] getTaskDebugWorker in DebugWorker\n"); |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
152 if (!task) { |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
153 printf("debug worker take task finished\n"); |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
154 goto worker->shutdown(); |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
155 } |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
156 printf("debug worker get task\n"); |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
157 task->worker = worker; |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
158 enum Code taskCg = task->next; |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
159 task->next = C_odgCommitDebugWorker; // commit outputDG after task exec |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
160 goto meta(task, taskCg); // switch task context |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
161 } |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
162 |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
163 __code getTaskDebugWorker_stub(struct Context* context) { |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
164 DebugWorker* debugWorker = (DebugWorker*)GearImpl(context, Worker, worker); |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
165 Worker* worker = &Gearef(context,Worker)->worker->Worker; |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
166 struct Context* task = &Gearef(context, Queue)->data->Context; |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
167 goto getTaskDebugWorker(context, debugWorker, task, worker); |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
168 } |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
169 |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
170 __code odgCommitDebugWorker(struct DebugWorker* worker, struct Context* task) { |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
171 printf("[Debug log] odgCommitDebugWorker in DebugWorker\n"); |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
172 if (task->iterate) { |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
173 struct Iterator* iterator = task->iterator; |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
174 goto iterator->barrier(task, odgCommitDebugWorker1, odgCommitDebugWorker6); |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
175 } else { |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
176 goto odgCommitDebugWorker1(); |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
177 } |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
178 } |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
179 |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
180 __code odgCommitDebugWorker_stub(struct Context* context) { |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
181 // switch worker context |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
182 struct Context* workerContext = context->worker->worker->DebugWorker.context; |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
183 Gearef(workerContext, Worker)->worker = (union Data*)context->worker; |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
184 Gearef(workerContext, Worker)->task = context; |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
185 DebugWorker* debugWorker = (DebugWorker*)GearImpl(workerContext, Worker, worker); |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
186 goto odgCommitDebugWorker(workerContext, |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
187 debugWorker, |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
188 context); |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
189 } |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
190 |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
191 __code odgCommitDebugWorker1(struct DebugWorker* worker, struct Context* task) { |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
192 printf("[Debug log] odgCommitDebugWorker1 in DebugWorker\n"); |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
193 int i = worker->loopCounter; |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
194 if (task->odg+i < task->maxOdg) { |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
195 goto odgCommitDebugWorker2(); |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
196 } |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
197 worker->loopCounter = 0; |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
198 struct TaskManager* taskManager = task->taskManager; |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
199 goto taskManager->decrementTaskCount(odgCommitDebugWorker6); |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
200 } |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
201 |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
202 __code odgCommitDebugWorker2(struct DebugWorker* worker, struct Context* task) { |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
203 printf("[Debug log] odgCommitDebugWorker2 in DebugWorker\n"); |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
204 int i = worker->loopCounter; |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
205 struct Queue* queue = GET_WAIT_LIST(task->data[task->odg+i]); |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
206 goto queue->isEmpty(odgCommitDebugWorker3, odgCommitDebugWorker5); |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
207 } |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
208 |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
209 __code odgCommitDebugWorker3(struct DebugWorker* worker, struct Context* task) { |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
210 printf("[Debug log] odgCommitDebugWorker3 in DebugWorker\n"); |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
211 int i = worker->loopCounter; |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
212 struct Queue* queue = GET_WAIT_LIST(task->data[task->odg+i]); |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
213 goto queue->take(odgCommitDebugWorker4); |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
214 } |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
215 |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
216 __code odgCommitDebugWorker4(struct DebugWorker* worker, struct Context* task, struct Context* waitTask) { |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
217 printf("[Debug log] odgCommitDebugWorker4 in DebugWorker\n"); |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
218 if (__sync_fetch_and_sub(&waitTask->idgCount, 1) == 1) { // atomic decrement idg counter(__sync_fetch_and_sub function return initial value of waitTask->idgCount point) |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
219 struct TaskManager* taskManager = waitTask->taskManager; |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
220 goto taskManager->spawn(waitTask, odgCommitDebugWorker2); |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
221 } |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
222 goto odgCommitDebugWorker2(); |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
223 } |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
224 |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
225 __code odgCommitDebugWorker4_stub(struct Context* context) { |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
226 DebugWorker* debugWorker = (DebugWorker*)GearImpl(context, Worker, worker); |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
227 struct Context* task = Gearef(context, Worker)->task; |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
228 struct Context* waitTask = &Gearef(context, Queue)->data->Context; |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
229 goto odgCommitDebugWorker4(context, |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
230 debugWorker, |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
231 task, |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
232 waitTask); |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
233 } |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
234 |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
235 __code odgCommitDebugWorker5(struct DebugWorker* worker, struct Context* task) { |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
236 printf("[Debug log] odgCommitDebugWorker5 in DebugWorker\n"); |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
237 worker->loopCounter++; |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
238 goto odgCommitDebugWorker1(); |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
239 } |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
240 |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
241 __code odgCommitDebugWorker6(struct DebugWorker* worker, struct Context* task) { |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
242 printf("[Debug log] odgCommitDebugWorker6 in DebugWorker\n"); |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
243 struct Worker* taskWorker = task->worker; |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
244 goto taskWorker->taskReceive(taskWorker->tasks); |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
245 } |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
246 |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
247 __code shutdownDebugWorker(struct DebugWorker* worker) { |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
248 printf("[Debug log] shutdownDebugWorker in DebugWorker\n"); |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
249 goto exit_code(); |
e6778c866876
add DebugWorker and DebugTaskManager
Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
250 } |