annotate TaskManager/kernel/ppe/TaskInfo.cc @ 19:98bb1b2bb71e

*** empty log message ***
author gongo
date Sun, 10 Feb 2008 13:23:29 +0900
parents 7aa4c006e4be
children 31a7ff27ee20
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
5
75f184d16fa5 *** empty log message ***
gongo
parents: 3
diff changeset
1 #include <stdio.h>
75f184d16fa5 *** empty log message ***
gongo
parents: 3
diff changeset
2 #include <stdlib.h>
3
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
3 #include "TaskInfo.h"
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
4
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
5 TaskInfo::TaskInfo(int num)
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
6 {
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
7 machineNum = num;
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
8
10
7aa4c006e4be *** empty log message ***
gongo
parents: 6
diff changeset
9 taskListPool = NULL;
7aa4c006e4be *** empty log message ***
gongo
parents: 6
diff changeset
10 freeTaskList = NULL;
7aa4c006e4be *** empty log message ***
gongo
parents: 6
diff changeset
11
7aa4c006e4be *** empty log message ***
gongo
parents: 6
diff changeset
12 taskQueuePool = NULL;
7aa4c006e4be *** empty log message ***
gongo
parents: 6
diff changeset
13 freeTaskQueue = NULL;
7aa4c006e4be *** empty log message ***
gongo
parents: 6
diff changeset
14 activeTaskQueue = NULL;
7aa4c006e4be *** empty log message ***
gongo
parents: 6
diff changeset
15 waitTaskQueue = NULL;
7aa4c006e4be *** empty log message ***
gongo
parents: 6
diff changeset
16
7aa4c006e4be *** empty log message ***
gongo
parents: 6
diff changeset
17 taskPool = NULL;
7aa4c006e4be *** empty log message ***
gongo
parents: 6
diff changeset
18 freeTask = NULL;
19
98bb1b2bb71e *** empty log message ***
gongo
parents: 10
diff changeset
19 }
10
7aa4c006e4be *** empty log message ***
gongo
parents: 6
diff changeset
20
19
98bb1b2bb71e *** empty log message ***
gongo
parents: 10
diff changeset
21 void
98bb1b2bb71e *** empty log message ***
gongo
parents: 10
diff changeset
22 TaskInfo::init(void)
98bb1b2bb71e *** empty log message ***
gongo
parents: 10
diff changeset
23 {
10
7aa4c006e4be *** empty log message ***
gongo
parents: 6
diff changeset
24 init_taskList(machineNum*2);
7aa4c006e4be *** empty log message ***
gongo
parents: 6
diff changeset
25 init_taskQueue(TASK_MAX_SIZE*4);
7aa4c006e4be *** empty log message ***
gongo
parents: 6
diff changeset
26 init_task(TASK_MAX_SIZE*2);
7aa4c006e4be *** empty log message ***
gongo
parents: 6
diff changeset
27
7aa4c006e4be *** empty log message ***
gongo
parents: 6
diff changeset
28 machineTaskList = new TaskListPtr[machineNum];
7aa4c006e4be *** empty log message ***
gongo
parents: 6
diff changeset
29
7aa4c006e4be *** empty log message ***
gongo
parents: 6
diff changeset
30 for (int i = 0; i < machineNum; i++) {
7aa4c006e4be *** empty log message ***
gongo
parents: 6
diff changeset
31 machineTaskList[i] = get_free_taskList();
7aa4c006e4be *** empty log message ***
gongo
parents: 6
diff changeset
32 }
7aa4c006e4be *** empty log message ***
gongo
parents: 6
diff changeset
33 }
7aa4c006e4be *** empty log message ***
gongo
parents: 6
diff changeset
34
3
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
35 /**
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
36 * initialize pool of task_pack_list
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
37 * @return if (success) ? 0 : -1
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
38 */
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
39 int
6
39ce245235d4 *** empty log message ***
gongo
parents: 5
diff changeset
40 TaskInfo::init_taskList(int num)
3
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
41 {
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
42 if (!taskListPool) {
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
43 return extend_pool_taskList(num);
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
44 }
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
45 return 0;
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
46 }
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
47
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
48 /**
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
49 * @return free list from pool of task_pack_list
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
50 */
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
51 TaskListPtr
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
52 TaskInfo::get_free_taskList(void)
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
53 {
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
54 TaskListPtr q;
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
55
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
56 if (!freeTaskList) {
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
57 extend_pool_taskList(10);
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
58 }
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
59 q = freeTaskList;
6
39ce245235d4 *** empty log message ***
gongo
parents: 5
diff changeset
60 freeTaskList = freeTaskList->next;
3
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
61
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
62 q->length = 0;
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
63 q->next = 0;
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
64
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
65 return q;
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
66 }
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
67
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
68 /**
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
69 * initialize pool of task_queue
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
70 * @return if (success) ? 0 : -1
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
71 */
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
72 int
6
39ce245235d4 *** empty log message ***
gongo
parents: 5
diff changeset
73 TaskInfo::init_taskQueue(int num)
3
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
74 {
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
75 if (!taskQueuePool) {
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
76 return extend_pool_taskQueue(num);
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
77 }
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
78 return 0;
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
79 }
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
80
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
81 int
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
82 TaskInfo::extend_pool_taskQueue(int num)
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
83 {
6
39ce245235d4 *** empty log message ***
gongo
parents: 5
diff changeset
84 TaskQueuePtr q = NULL;
3
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
85
5
75f184d16fa5 *** empty log message ***
gongo
parents: 3
diff changeset
86 q = (TaskQueuePtr)malloc(sizeof(TaskQueue)*(num+1));
3
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
87
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
88 if (q == NULL) {
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
89 return -1;
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
90 }
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
91 q->next = taskQueuePool;
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
92 taskQueuePool = q;
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
93
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
94 /* Connect all free queue in the pool */
6
39ce245235d4 *** empty log message ***
gongo
parents: 5
diff changeset
95 for (q = taskQueuePool + 1; --num > 0; q++) {
3
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
96 q->next = q + 1;
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
97 }
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
98 q->next = freeTaskQueue;
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
99 freeTaskQueue = taskQueuePool + 1;
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
100
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
101 return 0;
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
102 }
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
103
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
104 TaskQueuePtr
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
105 TaskInfo::get_free_taskQueue(HTaskPtr task)
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
106 {
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
107 TaskQueuePtr q;
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
108
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
109 if (!freeTaskQueue) {
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
110 extend_pool_taskQueue(100);
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
111 }
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
112 q = freeTaskQueue;
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
113 freeTaskQueue = freeTaskQueue->next;
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
114
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
115 q->task = task;
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
116 q->next = NULL;
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
117
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
118 return q;
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
119 }
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
120
5
75f184d16fa5 *** empty log message ***
gongo
parents: 3
diff changeset
121
3
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
122 int
6
39ce245235d4 *** empty log message ***
gongo
parents: 5
diff changeset
123 TaskInfo::init_task(int num)
3
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
124 {
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
125 if (!taskPool) {
5
75f184d16fa5 *** empty log message ***
gongo
parents: 3
diff changeset
126 return extend_pool_task(num);
3
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
127 }
5
75f184d16fa5 *** empty log message ***
gongo
parents: 3
diff changeset
128 return 0;
75f184d16fa5 *** empty log message ***
gongo
parents: 3
diff changeset
129 }
75f184d16fa5 *** empty log message ***
gongo
parents: 3
diff changeset
130
75f184d16fa5 *** empty log message ***
gongo
parents: 3
diff changeset
131 int
75f184d16fa5 *** empty log message ***
gongo
parents: 3
diff changeset
132 TaskInfo::extend_pool_task(int num)
75f184d16fa5 *** empty log message ***
gongo
parents: 3
diff changeset
133 {
6
39ce245235d4 *** empty log message ***
gongo
parents: 5
diff changeset
134 HTaskPtr q = NULL;
5
75f184d16fa5 *** empty log message ***
gongo
parents: 3
diff changeset
135
75f184d16fa5 *** empty log message ***
gongo
parents: 3
diff changeset
136 q = (HTaskPtr)malloc(sizeof(HTask)*(num+1));
3
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
137
5
75f184d16fa5 *** empty log message ***
gongo
parents: 3
diff changeset
138 if (q == NULL) {
75f184d16fa5 *** empty log message ***
gongo
parents: 3
diff changeset
139 return -1;
75f184d16fa5 *** empty log message ***
gongo
parents: 3
diff changeset
140 }
75f184d16fa5 *** empty log message ***
gongo
parents: 3
diff changeset
141 q->next = taskPool;
75f184d16fa5 *** empty log message ***
gongo
parents: 3
diff changeset
142 taskPool = q;
75f184d16fa5 *** empty log message ***
gongo
parents: 3
diff changeset
143
75f184d16fa5 *** empty log message ***
gongo
parents: 3
diff changeset
144 /* Connect all free queue in the pool */
6
39ce245235d4 *** empty log message ***
gongo
parents: 5
diff changeset
145 for (q = taskPool + 1; --num > 0; q++) {
5
75f184d16fa5 *** empty log message ***
gongo
parents: 3
diff changeset
146 q->next = q + 1;
75f184d16fa5 *** empty log message ***
gongo
parents: 3
diff changeset
147 }
75f184d16fa5 *** empty log message ***
gongo
parents: 3
diff changeset
148 q->next = freeTask;
75f184d16fa5 *** empty log message ***
gongo
parents: 3
diff changeset
149 freeTask = taskPool + 1;
75f184d16fa5 *** empty log message ***
gongo
parents: 3
diff changeset
150
3
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
151 return 0;
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
152 }
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
153
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
154 HTaskPtr
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
155 TaskInfo::get_free_task(int cmd, int size,
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
156 unsigned long long in_addr,
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
157 unsigned long long out_addr)
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
158 {
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
159 HTaskPtr q;
5
75f184d16fa5 *** empty log message ***
gongo
parents: 3
diff changeset
160
75f184d16fa5 *** empty log message ***
gongo
parents: 3
diff changeset
161 if (!freeTask) {
75f184d16fa5 *** empty log message ***
gongo
parents: 3
diff changeset
162 extend_pool_task(100);
75f184d16fa5 *** empty log message ***
gongo
parents: 3
diff changeset
163 }
75f184d16fa5 *** empty log message ***
gongo
parents: 3
diff changeset
164 q = freeTask;
75f184d16fa5 *** empty log message ***
gongo
parents: 3
diff changeset
165 freeTask = freeTask->next;
3
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
166
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
167 q->command = cmd;
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
168 q->in_addr = in_addr;
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
169 q->out_addr = out_addr;
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
170 q->in_size = size;
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
171 q->wait_me = NULL;
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
172 q->wait_i = NULL;
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
173 q->post_func = NULL;
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
174
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
175 return q;
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
176 }
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
177
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
178 void
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
179 TaskInfo::free_taskList(TaskListPtr q)
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
180 {
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
181 q->next = freeTaskList;
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
182 freeTaskList = q;
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
183 }
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
184
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
185 void
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
186 TaskInfo::free_taskQueue(TaskQueuePtr q)
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
187 {
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
188 q->next = freeTaskQueue;
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
189 freeTaskQueue = q;
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
190 }
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
191
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
192 void
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
193 TaskInfo::free_task(HTaskPtr q)
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
194 {
5
75f184d16fa5 *** empty log message ***
gongo
parents: 3
diff changeset
195 q->next = freeTask;
75f184d16fa5 *** empty log message ***
gongo
parents: 3
diff changeset
196 freeTask = q;
3
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
197 }
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
198
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
199 /**
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
200 * [task] is added to active_task
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
201 */
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
202 void
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
203 TaskInfo::append_activeTask(HTaskPtr task)
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
204 {
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
205 TaskQueuePtr q;
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
206
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
207 q = get_free_taskQueue(task);
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
208 activeTaskQueue = append_taskQueue(activeTaskQueue, q);
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
209 }
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
210
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
211 /**
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
212 * [task] is added to wait_task
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
213 */
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
214 void
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
215 TaskInfo::append_waitTask(HTaskPtr task)
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
216 {
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
217 TaskQueuePtr q;
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
218
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
219 q = get_free_taskQueue(task);
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
220 waitTaskQueue = append_taskQueue(waitTaskQueue, q);
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
221 }
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
222
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
223 void
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
224 TaskInfo::check_task_finish(HTaskPtr task)
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
225 {
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
226 notify_wait_taskQueue(task, task->wait_me);
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
227 task->post_func();
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
228
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
229 free_task(task);
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
230 }
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
231
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
232 void
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
233 TaskInfo::notify_wait_taskQueue(HTaskPtr depend, TaskQueuePtr list)
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
234 {
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
235 TaskQueuePtr p, d;
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
236 HTaskPtr task;
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
237
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
238 p = list; // wait task list
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
239
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
240 while (p) {
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
241 task = p->task;
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
242 task->wait_i = remove_taskQueue_eq_task(task->wait_i, depend);
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
243 if (task->wait_i == NULL) {
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
244 d = p;
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
245 p = p->next;
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
246 append_activeTask(task);
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
247 waitTaskQueue = remove_taskQueue(waitTaskQueue, d);
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
248 } else {
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
249 p = p->next;
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
250 }
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
251 }
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
252 }
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
253
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
254 TaskQueuePtr
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
255 TaskInfo::remove_taskQueue_eq_task(TaskQueuePtr list, HTaskPtr task)
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
256 {
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
257 TaskQueuePtr p = list;
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
258 TaskQueuePtr p1;
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
259
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
260 if (!p) return p;
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
261
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
262 if (p->task == task) {
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
263 list = list->next;
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
264 free_taskQueue(p);
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
265 } else {
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
266 p1 = p->next;
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
267 while (p1 && p1->task && p1->task != task) {
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
268 p1 = p1->next;
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
269 p = p->next;
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
270 }
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
271 if (p1) {
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
272 p->next = p1->next;
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
273 free_taskQueue(p1);
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
274 }
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
275 }
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
276
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
277 return list;
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
278 }
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
279
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
280 TaskQueuePtr
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
281 TaskInfo::remove_taskQueue(TaskQueuePtr list, TaskQueuePtr q)
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
282 {
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
283 TaskQueuePtr p = list;
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
284 TaskQueuePtr p1;
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
285
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
286 if (!p) return p;
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
287
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
288 if (p == q) {
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
289 list = list->next;
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
290 free_taskQueue(p);
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
291 } else {
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
292 p1 = p->next;
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
293 while (p1 && p1 != q) {
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
294 p1 = p1->next;
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
295 p = p->next;
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
296 }
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
297 if (p1) {
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
298 p->next = p1->next;
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
299 free_taskQueue(p1);
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
300 }
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
301 }
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
302
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
303 return list;
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
304 }
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
305
10
7aa4c006e4be *** empty log message ***
gongo
parents: 6
diff changeset
306
7aa4c006e4be *** empty log message ***
gongo
parents: 6
diff changeset
307 void
7aa4c006e4be *** empty log message ***
gongo
parents: 6
diff changeset
308 TaskInfo::finish(void)
7aa4c006e4be *** empty log message ***
gongo
parents: 6
diff changeset
309 {
7aa4c006e4be *** empty log message ***
gongo
parents: 6
diff changeset
310 destroy_taskList();
7aa4c006e4be *** empty log message ***
gongo
parents: 6
diff changeset
311 destroy_taskQueue();
7aa4c006e4be *** empty log message ***
gongo
parents: 6
diff changeset
312 destroy_task();
7aa4c006e4be *** empty log message ***
gongo
parents: 6
diff changeset
313
7aa4c006e4be *** empty log message ***
gongo
parents: 6
diff changeset
314 delete [] machineTaskList;
7aa4c006e4be *** empty log message ***
gongo
parents: 6
diff changeset
315 }
7aa4c006e4be *** empty log message ***
gongo
parents: 6
diff changeset
316
7aa4c006e4be *** empty log message ***
gongo
parents: 6
diff changeset
317 void
7aa4c006e4be *** empty log message ***
gongo
parents: 6
diff changeset
318 TaskInfo::destroy_taskList(void)
7aa4c006e4be *** empty log message ***
gongo
parents: 6
diff changeset
319 {
7aa4c006e4be *** empty log message ***
gongo
parents: 6
diff changeset
320 TaskListPtr q;
7aa4c006e4be *** empty log message ***
gongo
parents: 6
diff changeset
321
7aa4c006e4be *** empty log message ***
gongo
parents: 6
diff changeset
322 for (q = taskListPool; q; q = q->next) {
7aa4c006e4be *** empty log message ***
gongo
parents: 6
diff changeset
323 free(q);
7aa4c006e4be *** empty log message ***
gongo
parents: 6
diff changeset
324 }
7aa4c006e4be *** empty log message ***
gongo
parents: 6
diff changeset
325 freeTaskList = taskListPool = NULL;
7aa4c006e4be *** empty log message ***
gongo
parents: 6
diff changeset
326 }
7aa4c006e4be *** empty log message ***
gongo
parents: 6
diff changeset
327
7aa4c006e4be *** empty log message ***
gongo
parents: 6
diff changeset
328 void
7aa4c006e4be *** empty log message ***
gongo
parents: 6
diff changeset
329 TaskInfo::destroy_taskQueue(void)
7aa4c006e4be *** empty log message ***
gongo
parents: 6
diff changeset
330 {
7aa4c006e4be *** empty log message ***
gongo
parents: 6
diff changeset
331 TaskQueuePtr q;
7aa4c006e4be *** empty log message ***
gongo
parents: 6
diff changeset
332
7aa4c006e4be *** empty log message ***
gongo
parents: 6
diff changeset
333 for (q = taskQueuePool; q; q = q->next) {
7aa4c006e4be *** empty log message ***
gongo
parents: 6
diff changeset
334 free(q);
7aa4c006e4be *** empty log message ***
gongo
parents: 6
diff changeset
335 }
7aa4c006e4be *** empty log message ***
gongo
parents: 6
diff changeset
336 freeTaskQueue = taskQueuePool = NULL;
7aa4c006e4be *** empty log message ***
gongo
parents: 6
diff changeset
337 }
7aa4c006e4be *** empty log message ***
gongo
parents: 6
diff changeset
338
7aa4c006e4be *** empty log message ***
gongo
parents: 6
diff changeset
339 void
7aa4c006e4be *** empty log message ***
gongo
parents: 6
diff changeset
340 TaskInfo::destroy_task(void)
7aa4c006e4be *** empty log message ***
gongo
parents: 6
diff changeset
341 {
7aa4c006e4be *** empty log message ***
gongo
parents: 6
diff changeset
342 HTaskPtr q;
7aa4c006e4be *** empty log message ***
gongo
parents: 6
diff changeset
343
7aa4c006e4be *** empty log message ***
gongo
parents: 6
diff changeset
344 for (q = taskPool; q; q = q->next) {
7aa4c006e4be *** empty log message ***
gongo
parents: 6
diff changeset
345 free(q);
7aa4c006e4be *** empty log message ***
gongo
parents: 6
diff changeset
346 }
7aa4c006e4be *** empty log message ***
gongo
parents: 6
diff changeset
347 freeTask = taskPool = NULL;
7aa4c006e4be *** empty log message ***
gongo
parents: 6
diff changeset
348 }
7aa4c006e4be *** empty log message ***
gongo
parents: 6
diff changeset
349
3
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
350 TaskListPtr
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
351 append_taskList(TaskListPtr list, TaskListPtr q)
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
352 {
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
353 TaskListPtr p = list;
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
354
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
355 if (!p) {
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
356 return q;
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
357 } else {
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
358 while (p->next) p = p->next;
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
359 p->next = q;
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
360 return list;
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
361 }
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
362 }
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
363
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
364 TaskQueuePtr
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
365 append_taskQueue(TaskQueuePtr list, TaskQueuePtr q)
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
366 {
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
367 TaskQueuePtr p = list;
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
368
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
369 if (!p) {
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
370 return q;
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
371 } else {
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
372 while(p->next) p = p->next;
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
373 p->next = q;
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
374 return list;
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
375 }
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
376 }