160 |
<= rp->curtime) { |
<= rp->curtime) { |
161 |
debug(1, ("deleting completed %s request", |
debug(1, ("deleting completed %s request", |
162 |
request_class[req->type].name)); |
request_class[req->type].name)); |
163 |
list_remove_current(request_list); |
list_remove(request_list, req, NULL); |
164 |
request_free(req); |
request_free(req); |
165 |
return 0; |
return 0; |
166 |
} |
} |
170 |
request_class[req->type].name, |
request_class[req->type].name, |
171 |
(u_long) req->child_id)); |
(u_long) req->child_id)); |
172 |
(*rp->handler)(req); |
(*rp->handler)(req); |
173 |
list_remove_current(request_list); |
list_remove(request_list, req, NULL); |
174 |
request_free(req); |
request_free(req); |
175 |
} else if (req->timestamp + request_class[req->type].ttl |
} else if (req->timestamp + request_class[req->type].ttl |
176 |
<= rp->curtime) { |
<= rp->curtime) { |
177 |
radlog(L_NOTICE, |
radlog(L_NOTICE, |
178 |
_("Proxy %s request expired in queue"), |
_("Proxy %s request expired in queue"), |
179 |
request_class[req->type].name); |
request_class[req->type].name); |
180 |
list_remove_current(request_list); |
list_remove(request_list, req, NULL); |
181 |
request_free(req); |
request_free(req); |
182 |
} |
} |
183 |
} else if (req->timestamp + request_class[req->type].ttl |
} else if (req->timestamp + request_class[req->type].ttl |
314 |
request_update(pid_t pid, int status, void *ptr) |
request_update(pid_t pid, int status, void *ptr) |
315 |
{ |
{ |
316 |
REQUEST *p; |
REQUEST *p; |
317 |
|
ITERATOR *itr; |
318 |
|
|
319 |
debug(100,("enter")); |
debug(100,("enter")); |
320 |
for (p = list_first(request_list); p; p = list_next(request_list)) |
itr = iterator_create(request_list); |
321 |
|
if (!itr) |
322 |
|
return; |
323 |
|
for (p = iterator_first(itr); p; p = iterator_next(itr)) |
324 |
if (p->child_id == pid) { |
if (p->child_id == pid) { |
325 |
p->status = status; |
p->status = status; |
326 |
if (ptr && request_class[p->type].update) |
if (ptr && request_class[p->type].update) |
327 |
request_class[p->type].update(p->data, ptr); |
request_class[p->type].update(p->data, ptr); |
328 |
break; |
break; |
329 |
} |
} |
330 |
|
iterator_destroy(&itr); |
331 |
debug(100,("exit")); |
debug(100,("exit")); |
332 |
} |
} |
333 |
|
|
353 |
} |
} |
354 |
|
|
355 |
void * |
void * |
356 |
request_scan_list(int type, list_iterator_t itr, void *closure) |
request_scan_list(int type, list_iterator_t fn, void *closure) |
357 |
{ |
{ |
358 |
REQUEST *p; |
REQUEST *p; |
359 |
|
ITERATOR *itr; |
360 |
|
|
361 |
for (p = list_first(request_list); p; p = list_next(request_list)) { |
itr = iterator_create(request_list); |
362 |
if (p->type == type |
if (!itr) |
363 |
&& itr(p->data, closure) == 0) |
return NULL; |
364 |
return p->data; |
for (p = iterator_first(itr); p; p = iterator_next(itr)) { |
365 |
} |
if (p->type == type && fn(p->data, closure) == 0) |
366 |
return NULL; |
break; |
367 |
|
} |
368 |
|
iterator_destroy(&itr); |
369 |
|
return p ? p->data : NULL; |
370 |
} |
} |
371 |
|
|
372 |
static int |
static int |