annotate TaskManager/kernel/ppe/TaskManagerImpl.cc @ 220:29e338dbc280

fix
author gongo@localhost.localdomain
date Mon, 09 Feb 2009 21:58:45 +0900
parents 44e3bf914155
children 58fd16298954
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>
3
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
2 #include "TaskManagerImpl.h"
46
f154d9d07a42 *** empty log message ***
gongo
parents: 42
diff changeset
3 #include "types.h"
f154d9d07a42 *** empty log message ***
gongo
parents: 42
diff changeset
4 #include "error.h"
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
5 #include "../sys_task/SysTask.h"
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
6
220
gongo@localhost.localdomain
parents: 115
diff changeset
7 static HTaskPtr systask_start;
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
8 static HTaskPtr systask_finish;
42
aa11038dbdc1 *** empty log message ***
gongo
parents: 18
diff changeset
9
3
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
10 void
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
11 noaction(void *p)
3
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
12 {
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
13 }
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
14
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
15 TaskManagerImpl::TaskManagerImpl(int num)
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
16 : machineNum(num), activeTaskQueue(NULL), waitTaskQueue(NULL) {}
50
7927e00fb8e2 *** empty log message ***
gongo
parents: 48
diff changeset
17
220
gongo@localhost.localdomain
parents: 115
diff changeset
18 /**
gongo@localhost.localdomain
parents: 115
diff changeset
19 * 一番最初に PPE で実行される systask_start
gongo@localhost.localdomain
parents: 115
diff changeset
20 * 一番最後に、全てのタスクの終了を待つ systask_finish
gongo@localhost.localdomain
parents: 115
diff changeset
21 * 番兵的な意味で実装
gongo@localhost.localdomain
parents: 115
diff changeset
22 */
42
aa11038dbdc1 *** empty log message ***
gongo
parents: 18
diff changeset
23 void
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
24 TaskManagerImpl::systask_init(void)
42
aa11038dbdc1 *** empty log message ***
gongo
parents: 18
diff changeset
25 {
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
26 systask_register();
42
aa11038dbdc1 *** empty log message ***
gongo
parents: 18
diff changeset
27
220
gongo@localhost.localdomain
parents: 115
diff changeset
28 systask_start = create_task(SYSTASK_START);
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
29 systask_finish = create_task(SYSTASK_FINISH);
220
gongo@localhost.localdomain
parents: 115
diff changeset
30
gongo@localhost.localdomain
parents: 115
diff changeset
31 systask_start->spawn();
gongo@localhost.localdomain
parents: 115
diff changeset
32
gongo@localhost.localdomain
parents: 115
diff changeset
33 // systask_finish で spawn すると
gongo@localhost.localdomain
parents: 115
diff changeset
34 // systask_finish->wait_for(systask_finish);
gongo@localhost.localdomain
parents: 115
diff changeset
35 // とかなって無限ループになるので、
gongo@localhost.localdomain
parents: 115
diff changeset
36 // これだけは明示的に append_waitTask() で
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
37 append_waitTask(systask_finish);
42
aa11038dbdc1 *** empty log message ***
gongo
parents: 18
diff changeset
38 }
aa11038dbdc1 *** empty log message ***
gongo
parents: 18
diff changeset
39
3
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
40 HTaskPtr
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
41 TaskManagerImpl::create_task(int cmd)
3
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
42 {
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
43 HTaskPtr new_task;
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
44
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
45 new_task = bufferManager->create_task(cmd);
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
46 new_task->post_func = noaction;
63
54355e641172 *** empty log message ***
gongo
parents: 58
diff changeset
47 new_task->mimpl = this;
54355e641172 *** empty log message ***
gongo
parents: 58
diff changeset
48
3
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
49 return new_task;
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
50 }
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
51
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
52 /**
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
53 * task の依存関係を設定
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
54 * master task が終わってから、slave task を実行するように
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
55 * master->wait_for(slave);
3
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
56 */
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
57 void
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
58 TaskManagerImpl::set_task_depend(HTaskPtr master, HTaskPtr slave)
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
59 {
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
60 TaskQueuePtr m, s;
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
61
58
7492eb28b577 *** empty log message ***
gongo
parents: 54
diff changeset
62 m = bufferManager->create_taskQueue(master);
7492eb28b577 *** empty log message ***
gongo
parents: 54
diff changeset
63 s = bufferManager->create_taskQueue(slave);
3
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
64
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
65 master->wait_me = TaskQueue::append(master->wait_me, s);
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
66 slave->wait_i = TaskQueue::append(slave->wait_i, m);
3
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
67 }
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
68
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
69 /**
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
70 * タスクを実行可能キューまたは待機キューへ追加する。
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
71 * 依存関係が満たされていれば active, まだだったら wait へ。
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
72 * task->spawn();
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
73 */
3
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
74 void
18
0c9341da4522 *** empty log message ***
gongo
parents: 5
diff changeset
75 TaskManagerImpl::spawn_task(HTaskPtr task)
3
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
76 {
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
77 // waiter // master
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
78 // waitee // slave
3
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
79 if (task->wait_i == NULL) {
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
80 append_activeTask(task);
3
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
81 } else {
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
82 append_waitTask(task);
3
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
83 }
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
84
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
85 systask_finish->wait_for(task);
3
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
86 }
42
aa11038dbdc1 *** empty log message ***
gongo
parents: 18
diff changeset
87
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
88 /**
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
89 * Task を実行可能キューに追加する
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
90 */
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
91 void
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
92 TaskManagerImpl::append_activeTask(HTaskPtr task)
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
93 {
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
94 TaskQueuePtr q;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
95
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
96 q = bufferManager->create_taskQueue(task);
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
97 activeTaskQueue = TaskQueue::append(activeTaskQueue, q);
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
98 }
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
99
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
100 /**
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
101 * タスクが実行する CPU を選択する
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
102 *
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
103 * 現在は CPU_PPE, CPU_SPE, SPE_ANY, SPE_0, SPE_1, ..., SPE_5
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
104 * types.h に書いてます。
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
105 */
65
519d24aa7ac8 *** empty log message ***
gongo
parents: 63
diff changeset
106 void
519d24aa7ac8 *** empty log message ***
gongo
parents: 63
diff changeset
107 TaskManagerImpl::set_task_cpu(HTaskPtr task, CPU_TYPE type)
519d24aa7ac8 *** empty log message ***
gongo
parents: 63
diff changeset
108 {
519d24aa7ac8 *** empty log message ***
gongo
parents: 63
diff changeset
109 task->cpu_type = type;
519d24aa7ac8 *** empty log message ***
gongo
parents: 63
diff changeset
110 }
519d24aa7ac8 *** empty log message ***
gongo
parents: 63
diff changeset
111
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
112 /**
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
113 * 終了したタスクから依存の処理とか
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
114 * post_func() はこのタスクが終了したら実行する関数。
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
115 * 今のところ使ってないっす
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
116 *
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
117 * @param [task] 終了したタスク
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
118 */
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
119 void
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
120 TaskManagerImpl::check_task_finish(HTaskPtr task)
42
aa11038dbdc1 *** empty log message ***
gongo
parents: 18
diff changeset
121 {
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
122 notify_wait_taskQueue(task, task->wait_me);
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
123 task->post_func(task->post_arg);
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
124 bufferManager->free_task(task);
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
125 }
42
aa11038dbdc1 *** empty log message ***
gongo
parents: 18
diff changeset
126
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
127 /**
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
128 * 終了したタスク [depend] を待っている TaskList に
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
129 * 終わった事を知らせる(削除する
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
130 */
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
131 void
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
132 TaskManagerImpl::notify_wait_taskQueue(HTaskPtr depend, TaskQueuePtr list)
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
133 {
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
134 TaskQueuePtr p;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
135 HTaskPtr task;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
136
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
137 p = list; // wait task list
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
138
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
139 while (p) {
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
140 task = (HTaskPtr)p->task;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
141 task->wait_i = remove_taskQueue_eq_task(task->wait_i, depend);
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
142 p = p->next;
42
aa11038dbdc1 *** empty log message ***
gongo
parents: 18
diff changeset
143 }
aa11038dbdc1 *** empty log message ***
gongo
parents: 18
diff changeset
144
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
145 remove_taskQueue_all(list);
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
146 }
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
147
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
148 void
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
149 TaskManagerImpl::append_waitTask(HTaskPtr task)
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
150 {
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
151 TaskQueuePtr q;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
152
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
153 q = bufferManager->create_taskQueue(task);
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
154 waitTaskQueue = TaskQueue::append(waitTaskQueue, q);
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
155 }
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
156
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
157 /**
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
158 * waitQueue の中で依存関係を満たしたタスクは
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
159 * activeQueue へ移す
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
160 */
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
161 void
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
162 TaskManagerImpl::wakeup_waitTask(void)
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
163 {
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
164 TaskQueuePtr p, tmp;
42
aa11038dbdc1 *** empty log message ***
gongo
parents: 18
diff changeset
165
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
166 p = waitTaskQueue;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
167 while (p) {
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
168 HTaskPtr task = (HTaskPtr)p->task;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
169 tmp = p;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
170 p = p->next;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
171 if (task->wait_i == NULL) {
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
172 append_activeTask(task);
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
173 waitTaskQueue = remove_taskQueue(waitTaskQueue, tmp);
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
174 }
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
175 }
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
176 }
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
177
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
178 void
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
179 TaskManagerImpl::remove_taskQueue_all(TaskQueuePtr list)
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
180 {
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
181 TaskQueuePtr p = list;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
182 TaskQueuePtr p1;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
183
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
184 while (p != NULL) {
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
185 p1 = p->next;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
186 bufferManager->free_taskQueue(p);
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
187 p = p1;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
188 }
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
189 }
54
90523ccc4dff *** empty log message ***
gongo
parents: 50
diff changeset
190
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
191 /**
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
192 * [list] が持つ queue->task の中に [task] と同じ奴があれば
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
193 * 削除する。まあ remove_taskQueue() の HTask で比較するverです。
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
194 * こういうのはオーバーロードでやるもんなのかな?
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
195 */
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
196 TaskQueuePtr
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
197 TaskManagerImpl::remove_taskQueue_eq_task(TaskQueuePtr list, HTaskPtr task)
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
198 {
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
199 TaskQueuePtr p = list;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
200 TaskQueuePtr p1;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
201
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
202 if (p == NULL) return p;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
203
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
204 if (p->task == task) {
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
205 list = list->next;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
206 bufferManager->free_taskQueue(p);
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
207 } else {
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
208 p1 = p->next;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
209 while (p1 && p1->task && p1->task != task) {
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
210 p1 = p1->next;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
211 p = p->next;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
212 }
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
213 if (p1) {
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
214 p->next = p1->next;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
215 bufferManager->free_taskQueue(p1);
54
90523ccc4dff *** empty log message ***
gongo
parents: 50
diff changeset
216 }
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
217 }
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
218
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
219 return list;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
220 }
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
221
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
222 TaskQueuePtr
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
223 TaskManagerImpl::remove_taskQueue(TaskQueuePtr list, TaskQueuePtr q)
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
224 {
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
225 TaskQueuePtr p = list;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
226 TaskQueuePtr p1;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
227
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
228 if (!p) return p;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
229
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
230 if (p == q) {
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
231 list = list->next;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
232 bufferManager->free_taskQueue(p);
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
233 } else {
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
234 p1 = p->next;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
235 while (p1 && p1 != q) {
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
236 p1 = p1->next;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
237 p = p->next;
54
90523ccc4dff *** empty log message ***
gongo
parents: 50
diff changeset
238 }
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
239 if (p1) {
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
240 p->next = p1->next;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
241 bufferManager->free_taskQueue(p1);
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
242 }
46
f154d9d07a42 *** empty log message ***
gongo
parents: 42
diff changeset
243 }
42
aa11038dbdc1 *** empty log message ***
gongo
parents: 18
diff changeset
244
aa11038dbdc1 *** empty log message ***
gongo
parents: 18
diff changeset
245 return list;
aa11038dbdc1 *** empty log message ***
gongo
parents: 18
diff changeset
246 }
aa11038dbdc1 *** empty log message ***
gongo
parents: 18
diff changeset
247