ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/src/hd/rholo2l.c
(Generate patch)

Comparing ray/src/hd/rholo2l.c (file contents):
Revision 3.14 by schorsch, Mon Jun 30 14:59:12 2003 UTC vs.
Revision 3.20 by greg, Sat Dec 16 18:33:55 2023 UTC

# Line 30 | Line 30 | static int     maxqlen = 0;                    /* maximum packets per queue
30   static PACKET   *pqueue[MAXPROC];               /* packet queues */
31   static int      pqlen[MAXPROC];                 /* packet queue lengths */
32  
33 + static int bestout(void);
34 + static int slots_avail(void);
35 + static void queue_packet(PACKET *p);
36 + static PACKET * get_packets(int poll);
37 + static void killpersist(void);
38  
39 +
40   int
41 < start_rtrace()                  /* start rtrace process */
41 > start_rtrace(void)                      /* start rtrace process */
42   {
43          static char     buf1[8];
44          int     rmaxpack = 0;
# Line 53 | Line 59 | start_rtrace()                 /* start rtrace process */
59                  rtargv[rtargc++] = "-I-";
60                  rtargv[rtargc++] = "-h-";
61                  rtargv[rtargc++] = "-ld-";
62 +                rtargv[rtargc++] = "-co-";
63                  sprintf(buf1, "%d", RPACKSIZ);
64                  rtargv[rtargc++] = "-x"; rtargv[rtargc++] = buf1;
65                  rtargv[rtargc++] = "-y"; rtargv[rtargc++] = "0";
# Line 90 | Line 97 | start_rtrace()                 /* start rtrace process */
97  
98  
99   static int
100 < bestout()                       /* get best process to process packet */
100 > bestout(void)                   /* get best process to process packet */
101   {
102          int     cnt;
103 <        register int    pn, i;
103 >        int     pn, i;
104  
105          pn = 0;                 /* find shortest queue */
106          for (i = 1; i < nprocs; i++)
# Line 107 | Line 114 | bestout()                      /* get best process to process packet */
114                  if (pqlen[i] == pqlen[pn])
115                          cnt++;
116                                  /* break ties fairly */
117 <        if ((cnt = random() % cnt))
117 >        if ((cnt = irandom(cnt)))
118                  for (i = pn; i < nprocs; i++)
119                          if (pqlen[i] == pqlen[pn] && !cnt--)
120                                  return(i);
# Line 115 | Line 122 | bestout()                      /* get best process to process packet */
122   }
123  
124  
125 < int
126 < slots_avail()                   /* count packet slots available */
125 > static int
126 > slots_avail(void)                       /* count packet slots available */
127   {
128 <        register int    nslots = 0;
129 <        register int    i;
128 >        int     nslots = 0;
129 >        int     i;
130  
131          for (i = nprocs; i--; )
132                  nslots += maxqlen - pqlen[i];
# Line 127 | Line 134 | slots_avail()                  /* count packet slots available */
134   }
135  
136  
137 < queue_packet(p)                 /* queue up a beam packet */
138 < register PACKET *p;
137 > static void
138 > queue_packet(                   /* queue up a beam packet */
139 >        PACKET  *p
140 > )
141   {
142          int     pn, n;
143                                  /* determine process to write to */
# Line 144 | Line 153 | register PACKET        *p;
153          if (!pqlen[pn]++)       /* add it to the end of the queue */
154                  pqueue[pn] = p;
155          else {
156 <                register PACKET *rpl = pqueue[pn];
156 >                PACKET  *rpl = pqueue[pn];
157                  while (rpl->next != NULL)
158                          rpl = rpl->next;
159                  rpl->next = p;
# Line 152 | Line 161 | register PACKET        *p;
161   }
162  
163  
164 < PACKET *
165 < get_packets(poll)               /* read packets from rtrace processes */
166 < int     poll;
164 > static PACKET *
165 > get_packets(            /* read packets from rtrace processes */
166 >        int     poll
167 > )
168   {
169          static struct timeval   tpoll;  /* zero timeval struct */
170          fd_set  readset, errset;
171          PACKET  *pldone = NULL, *plend;
172 <        register PACKET *p;
172 >        PACKET  *p;
173          int     n, nr;
174 <        register int    pn;
174 >        int     pn;
175          float   *bp;
176                                          /* prepare select call */
177          FD_ZERO(&readset); FD_ZERO(&errset); n = 0;
# Line 191 | Line 201 | int    poll;
201                  n = read(rtpd[pn].r, (char *)rtbuf,
202                                  4*sizeof(float)*RPACKSIZ*pqlen[pn]);
203                  if (n < 0) {
204 <                        if (errno == EINTR | errno == EAGAIN)
204 >                        if ((errno == EINTR) | (errno == EAGAIN))
205                                  goto reread;
206                          error(SYSTEM, "read error in get_packets");
207                  }
# Line 227 | Line 237 | int    poll;
237          return(pldone);                         /* return finished packets */
238   eoferr:
239          error(USER, "rtrace process died");
240 +        return NULL; /* pro forma return */
241   }
242  
243  
244   PACKET *
245 < do_packets(pl)                  /* queue a packet list, return finished */
246 < register PACKET *pl;
245 > do_packets(                     /* queue a packet list, return finished */
246 >        PACKET  *pl
247 > )
248   {
249 <        register PACKET *p;
249 >        PACKET  *p;
250                                          /* consistency check */
251          if (nprocs < 1)
252                  error(CONSISTENCY, "do_packets called with no active process");
# Line 248 | Line 260 | register PACKET        *pl;
260  
261  
262   PACKET *
263 < flush_queue()                   /* empty all rtrace queues */
263 > flush_queue(void)                       /* empty all rtrace queues */
264   {
265          PACKET  *rpdone = NULL;
266 <        register PACKET *rpl;
266 >        PACKET  *rpl = NULL;
267          float   *bp;
268 <        register PACKET *p;
268 >        PACKET  *p;
269          int     i, n, nr;
270  
271          for (i = 0; i < nprocs; i++)
# Line 292 | Line 304 | flush_queue()                  /* empty all rtrace queues */
304   }
305  
306  
307 < static
308 < killpersist()                   /* kill persistent process */
307 > static void
308 > killpersist(void)                       /* kill persistent process */
309   {
310          FILE    *fp;
311          int     pid;
# Line 307 | Line 319 | killpersist()                  /* kill persistent process */
319  
320  
321   int
322 < end_rtrace()                    /* close rtrace process(es) */
322 > end_rtrace(void)                        /* close rtrace process(es) */
323   {
324          int     status = 0, rv;
325  
326          if (nprocs > 1)
327                  killpersist();
328 <        while (nprocs > 0) {
329 <                rv = close_process(&rtpd[--nprocs]);
318 <                if (rv > 0)
319 <                        status = rv;
320 <        }
328 >        status = close_processes(rtpd, nprocs);
329 >        nprocs = 0;
330          free((void *)rtbuf);
331          rtbuf = NULL;
332          maxqlen = 0;

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines