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

Comparing ray/src/rt/raypcalls.c (file contents):
Revision 2.34 by greg, Tue Jun 16 17:58:11 2020 UTC vs.
Revision 2.37 by greg, Sat Apr 6 00:30:30 2024 UTC

# Line 510 | Line 510 | ray_pclose(            /* close one or more child processes */
510          static int      inclose = 0;
511          RAY             res;
512          int             i, status = 0;
513 +                                        /* check no child / in child */
514 +        if (ray_pnprocs <= 0)
515 +                return;
516                                          /* check recursion */
517          if (inclose)
518                  return;
519          inclose++;
517                                        /* check no child / in child */
518        if (ray_pnprocs <= 0)
519                return;
520                                          /* check argument */
521          if ((nsub <= 0) | (nsub > ray_pnprocs))
522                  nsub = ray_pnprocs;
523                                          /* clear our ray queue */
524 +        i = r_send_next;
525 +        r_send_next = 0;
526          while (ray_presult(&res,0) > 0)
527 <                ;
528 <        r_send_next = 0;                /* hard reset in case of error */
527 >                ++i;
528 >        if (i) {
529 >                sprintf(errmsg, "dropped %d rays in ray_pclose()", i);
530 >                error(WARNING, errmsg);
531 >        }
532          r_recv_first = r_recv_next = RAYQLEN;
533                                          /* close send pipes */
534          for (i = ray_pnprocs-nsub; i < ray_pnprocs; i++)
# Line 537 | Line 542 | ray_pclose(            /* close one or more child processes */
542                  for (i = 0; i < nsub; ) {
543                          int     j, mystatus;
544                          RT_PID  pid = wait(&mystatus);
545 +                        if (pid < 0) {
546 +                                status = 127<<8;
547 +                                break;
548 +                        }
549                          for (j = ray_pnprocs-nsub; j < ray_pnprocs; j++)
550                                  if (r_proc[j].pid == pid) {
551                                          if (mystatus)

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines