/[radius]/radius/radiusd/rpp.c
ViewVC logotype

Diff of /radius/radiusd/rpp.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.2 by gray, Fri Apr 25 22:50:32 2003 UTC revision 1.3 by gray, Wed Apr 30 20:12:25 2003 UTC
# Line 189  rpp_proc_t * Line 189  rpp_proc_t *
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    
# Line 203  rpp_lookup_ready(int (*proc_main)(void * Line 203  rpp_lookup_ready(int (*proc_main)(void *
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                    
# Line 227  rpp_proc_t * Line 229  rpp_proc_t *
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                    
# Line 258  rpp_fdset(fd_set *read_fds, fd_set *writ Line 262  rpp_fdset(fd_set *read_fds, fd_set *writ
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])
# Line 271  rpp_fdset(fd_set *read_fds, fd_set *writ Line 276  rpp_fdset(fd_set *read_fds, fd_set *writ
276                                  max = p->p[1];                                  max = p->p[1];
277                  }                  }
278          }          }
279            iterator_destroy(&itr);
280          return max;          return max;
281  }  }
282    
# Line 278  int Line 284  int
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);
# Line 291  int Line 300  int
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);
# Line 312  rpp_ready(pid_t pid) Line 324  rpp_ready(pid_t pid)
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  }  }
# Line 331  rpp_flush() Line 343  rpp_flush()
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

Legend:
Removed from v.1.2  
changed lines
  Added in v.1.3

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26