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.36 by greg, Sat Apr 6 00:00:22 2024 UTC vs.
Revision 2.38 by greg, Tue Apr 30 22:25:46 2024 UTC

# Line 456 | Line 456 | ray_popen(                     /* open the specified # processes */
456                  nadd = MAX_NPROCS - ray_pnprocs;
457          if (nadd <= 0)
458                  return;
459 +        if (nobjects <= 0)
460 +                error(CONSISTENCY, "ray_popen() called before scene loaded");
461          ambsync();                      /* load any new ambient values */
462          if (shm_boundary == NULL) {     /* first child process? */
463                  preload_objs();         /* preload auxiliary data */
# Line 520 | Line 522 | ray_pclose(            /* close one or more child processes */
522                                          /* check argument */
523          if ((nsub <= 0) | (nsub > ray_pnprocs))
524                  nsub = ray_pnprocs;
525 <        i = 0;                          /* clear our ray queue */
525 >                                        /* clear our ray queue */
526 >        i = r_send_next;
527 >        r_send_next = 0;
528          while (ray_presult(&res,0) > 0)
529                  ++i;
530          if (i) {
531 <                sprintf(errmsg, "dropped %d ray results in ray_pclose()", i);
531 >                sprintf(errmsg, "dropped %d rays in ray_pclose()", i);
532                  error(WARNING, errmsg);
533          }
530        r_send_next = 0;                /* hard reset in case of error */
534          r_recv_first = r_recv_next = RAYQLEN;
535                                          /* close send pipes */
536          for (i = ray_pnprocs-nsub; i < ray_pnprocs; i++)
# Line 541 | Line 544 | ray_pclose(            /* close one or more child processes */
544                  for (i = 0; i < nsub; ) {
545                          int     j, mystatus;
546                          RT_PID  pid = wait(&mystatus);
547 +                        if (pid < 0) {
548 +                                status = 127<<8;
549 +                                break;
550 +                        }
551                          for (j = ray_pnprocs-nsub; j < ray_pnprocs; j++)
552                                  if (r_proc[j].pid == pid) {
553                                          if (mystatus)

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines