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

Comparing ray/src/gen/mkillum2.c (file contents):
Revision 2.16 by greg, Fri Sep 17 21:43:50 2004 UTC vs.
Revision 2.17 by greg, Sun Sep 19 08:42:22 2004 UTC

# Line 320 | Line 320 | raysamp(       /* queue a ray sample */
320          if (rt == NULL)         /* need to free up buffer? */
321                  rt = raywait(rt0);
322          if (rt == NULL)
323 <                error(SYSTEM, "raywait() returned NULL");
323 >                error(SYSTEM, "raywait() returned NULL in raysamp()");
324          fp = rt->buf + 6*rt->nrays;
325          *fp++ = org[0]; *fp++ = org[1]; *fp++ = org[2];
326          *fp++ = dir[0]; *fp++ = dir[1]; *fp = dir[2];
# Line 358 | Line 358 | raywait(                       /* retrieve rtrace results */
358   {
359          fd_set  readset, errset;
360          int     nr;
361 <        struct rtproc   *rt, *rtfree;
361 >        struct rtproc   *rtfree;
362 >        register struct rtproc  *rt;
363          register int    n;
364                                  /* prepare select call */
365          FD_ZERO(&readset); FD_ZERO(&errset); n = 0;
# Line 374 | Line 375 | raywait(                       /* retrieve rtrace results */
375          }
376          if (!nr)                /* no rays pending */
377                  return(NULL);
378 <        if (nr > 1)             /* call select for multiple processes */
379 <                n = select(n, &readset, (fd_set *)NULL, &errset,
380 <                                        (struct timeval *)NULL);
381 <        else
378 >        if (nr > 1) {           /* call select for multiple processes */
379 >                errno = 0;
380 >                if (select(n, &readset, NULL, &errset, NULL) < 0)
381 >                        error(SYSTEM, "select call error in raywait()");
382 >        } else
383                  FD_ZERO(&errset);
382        if (n <= 0)
383                return(NULL);
384          rtfree = NULL;          /* read from ready process(es) */
385          for (rt = rt0; rt != NULL; rt = rt->next) {
386                  if (!FD_ISSET(rt->pd.r, &readset) &&
# Line 388 | Line 388 | raywait(                       /* retrieve rtrace results */
388                          continue;
389                  for (n = 0; n < rt->bsiz && rt->dest[n] != NULL; n++)
390                          ;
391 <                errno = 0;
392 <                nr = read(rt->pd.r, (char *)rt->buf, 3*sizeof(float)*(n+1));
393 <                if (nr < 0)
394 <                        error(SYSTEM, "read error in raywait()");
395 <                if (nr == 0)                            /* unexpected EOF */
391 >                nr = 3*sizeof(float)*(n+1);
392 >                if (readbuf(rt->pd.r, (char *)rt->buf, nr) < nr)
393                          error(USER, "rtrace process died");
397                if (nr < 3*sizeof(float)*(n+1)) {       /* read the rest */
398                        nr = readbuf(rt->pd.r, (char *)rt->buf,
399                                        3*sizeof(float)*(n+1) - nr);
400                        if (nr < 0)
401                                error(USER, "readbuf error in raywait()");
402                }
394                  while (n-- > 0) {
395                          rt->dest[n][0] += rt->buf[3*n];
396                          rt->dest[n][1] += rt->buf[3*n+1];

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines