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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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 }