189 |
rpp_lookup_fd(int fd) |
rpp_lookup_fd(int fd) |
190 |
{ |
{ |
191 |
rpp_proc_t *p; |
rpp_proc_t *p; |
192 |
|
ITERATOR *itr = iterator_create(process_list); |
193 |
for (p = list_first(process_list); p; |
for (p = iterator_first(itr); p; p = iterator_next(itr)) |
|
p = list_next(process_list)) |
|
194 |
if (p->p[0] == fd) |
if (p->p[0] == fd) |
195 |
break; |
break; |
196 |
|
iterator_destroy(&itr); |
197 |
return p; |
return p; |
198 |
} |
} |
199 |
|
|
203 |
rpp_proc_t *p; |
rpp_proc_t *p; |
204 |
|
|
205 |
if (process_list) { |
if (process_list) { |
206 |
for (p = list_first(process_list); p && !p->ready; |
ITERATOR *itr = iterator_create(process_list); |
207 |
p = list_next(process_list)) |
for (p = iterator_first(itr); p && !p->ready; |
208 |
|
p = iterator_next(itr)) |
209 |
; |
; |
210 |
|
iterator_destroy(&itr); |
211 |
} else |
} else |
212 |
process_list = list_create(); |
process_list = list_create(); |
213 |
|
|
229 |
rpp_lookup_pid(pid_t pid) |
rpp_lookup_pid(pid_t pid) |
230 |
{ |
{ |
231 |
rpp_proc_t *p; |
rpp_proc_t *p; |
232 |
for (p = list_first(process_list); p; p = list_next(process_list)) { |
ITERATOR *itr = iterator_create(process_list); |
233 |
|
for (p = iterator_first(itr); p; p = iterator_next(itr)) { |
234 |
if (p->pid == pid) |
if (p->pid == pid) |
235 |
break; |
break; |
236 |
} |
} |
237 |
|
iterator_destroy(&itr); |
238 |
return p; |
return p; |
239 |
} |
} |
240 |
|
|
262 |
{ |
{ |
263 |
int max = 0; |
int max = 0; |
264 |
rpp_proc_t *p; |
rpp_proc_t *p; |
265 |
|
ITERATOR *itr = iterator_create(process_list); |
266 |
|
|
267 |
for (p = list_first(process_list); p; p = list_next(process_list)) { |
for (p = iterator_first(itr); p; p = iterator_next(itr)) { |
268 |
if (read_fds) { |
if (read_fds) { |
269 |
FD_SET(p->p[0], read_fds); |
FD_SET(p->p[0], read_fds); |
270 |
if (max < p->p[0]) |
if (max < p->p[0]) |
276 |
max = p->p[1]; |
max = p->p[1]; |
277 |
} |
} |
278 |
} |
} |
279 |
|
iterator_destroy(&itr); |
280 |
return max; |
return max; |
281 |
} |
} |
282 |
|
|
284 |
rpp_read(int fd, void *data, size_t size) |
rpp_read(int fd, void *data, size_t size) |
285 |
{ |
{ |
286 |
rpp_proc_t *p; |
rpp_proc_t *p; |
287 |
|
ITERATOR *itr = iterator_create(process_list); |
288 |
|
|
289 |
for (p = list_first(process_list); p && p->p[0] != fd; |
for (p = iterator_first(itr); |
290 |
p = list_next(process_list)) |
p && p->p[0] != fd; |
291 |
|
p = iterator_next(itr)) |
292 |
; |
; |
293 |
|
iterator_destroy(&itr); |
294 |
if (!p) |
if (!p) |
295 |
return -1; |
return -1; |
296 |
return rpp_fd_read(p->p[0], data, size); |
return rpp_fd_read(p->p[0], data, size); |
300 |
rpp_read_set(fd_set *fds, void *data, size_t size) |
rpp_read_set(fd_set *fds, void *data, size_t size) |
301 |
{ |
{ |
302 |
rpp_proc_t *p; |
rpp_proc_t *p; |
303 |
|
ITERATOR *itr = iterator_create(process_list); |
304 |
|
|
305 |
for (p = list_first(process_list); p && !FD_ISSET(p->p[0], fds); |
for (p = iterator_first(itr); |
306 |
p = list_next(process_list)) |
p && !FD_ISSET(p->p[0], fds); |
307 |
|
p = iterator_next(itr)) |
308 |
; |
; |
309 |
|
iterator_destroy(&itr); |
310 |
if (!p) |
if (!p) |
311 |
return -1; |
return -1; |
312 |
FD_CLR(p->p[0], fds); |
FD_CLR(p->p[0], fds); |
324 |
return 1; |
return 1; |
325 |
} else { |
} else { |
326 |
rpp_proc_t *p; |
rpp_proc_t *p; |
327 |
|
ITERATOR *itr = iterator_create(process_list); |
328 |
|
|
329 |
for (p = list_first(process_list); |
for (p = iterator_first(itr); p; p = iterator_next(itr)) { |
|
p; |
|
|
p = list_next(process_list)) { |
|
330 |
if (p->pid == pid) { |
if (p->pid == pid) { |
|
if (p->ready) |
|
|
return 1; |
|
331 |
break; |
break; |
332 |
} |
} |
333 |
} |
} |
334 |
|
iterator_destroy(&itr); |
335 |
|
if (p && p->ready) |
336 |
|
return 1; |
337 |
} |
} |
338 |
return 0; |
return 0; |
339 |
} |
} |
343 |
{ |
{ |
344 |
time_t t; |
time_t t; |
345 |
unsigned count; |
unsigned count; |
346 |
|
ITERATOR *itr = iterator_create(process_list); |
347 |
|
|
348 |
time(&t); |
time(&t); |
349 |
|
|
350 |
do { |
do { |
351 |
rpp_proc_t *p; |
rpp_proc_t *p; |
352 |
for (count = 0, p = list_first(process_list); |
for (count = 0, p = iterator_first(itr); |
353 |
p; |
p; |
354 |
p = list_next(process_list)) |
p = iterator_next(itr)) |
355 |
if (!p->ready) |
if (!p->ready) |
356 |
count++; |
count++; |
357 |
} while (count > 0 && time(NULL) - t <= 10); |
} while (count > 0 && time(NULL) - t <= 10); |
358 |
|
iterator_destroy(&itr); |
359 |
} |
} |
360 |
|
|
361 |
static int |
static int |