--- ray/src/hd/rholo2l.c 1997/10/31 10:23:29 3.1 +++ ray/src/hd/rholo2l.c 1997/12/11 11:51:20 3.8 @@ -10,19 +10,22 @@ static char SCCSid[] = "$SunId$ SGI"; #include "rholo.h" #include "random.h" +#include "paths.h" +#include "selcall.h" #include #include #ifndef MAXPROC -#define MAXPROC 16 +#define MAXPROC 64 #endif -static char PFILE[] = "/usr/tmp/RHpersist"; /* persist file name */ +int nprocs = 0; /* running process count */ +static char pfile[] = TEMPLATE; /* persist file name */ + static int rtpd[MAXPROC][3]; /* process descriptors */ static float *rtbuf = NULL; /* allocated i/o buffer */ static int maxqlen = 0; /* maximum packets per queue */ -static int nprocs = 0; /* number of processes */ static PACKET *pqueue[MAXPROC]; /* packet queues */ static int pqlen[MAXPROC]; /* packet queue lengths */ @@ -53,10 +56,12 @@ start_rtrace() /* start rtrace process */ rtargv[rtargc++] = "-x"; rtargv[rtargc++] = buf1; rtargv[rtargc++] = "-y"; rtargv[rtargc++] = "0"; rtargv[rtargc++] = "-fff"; - rtargv[rtargc++] = "-ovl"; - rtargv[rtargc++] = nowarn ? "-w-" : "-w+"; + rtargv[rtargc++] = vbool(VDIST) ? "-ovl" : "-ovL"; + if (nowarn) + rtargv[rtargc++] = "-w-"; if (npt > 1) { - rtargv[rtargc++] = "-PP"; rtargv[rtargc++] = PFILE; + mktemp(pfile); + rtargv[rtargc++] = "-PP"; rtargv[rtargc++] = pfile; } rtargv[rtargc++] = vval(OCTREE); rtargv[rtargc] = NULL; @@ -207,7 +212,7 @@ int poll; if (n) /* read past end? */ error(INTERNAL, "packet sync error in get_packets"); /* take from queue */ - if (pldone = NULL) + if (pldone == NULL) pldone = plend = pqueue[pn]; else plend->next = pqueue[pn]; @@ -218,7 +223,7 @@ int poll; } return(pldone); /* return finished packets */ eoferr: - error(USER, "unexpected EOF from rtrace process"); + error(USER, "rtrace process died"); } @@ -252,15 +257,18 @@ flush_queue() /* empty all rtrace queues */ if (pqlen[i]) { if (rpdone == NULL) { /* tack on queue */ rpdone = rpl = pqueue[i]; - n = rpl->nr; + if ((nr = rpl->nr) < RPACKSIZ) nr++; } else { rpl->next = pqueue[i]; - n = 0; + nr = 0; } - while (rpl->next != NULL) - n += (rpl = rpl->next)->nr; + while (rpl->next != NULL) { + nr += (rpl = rpl->next)->nr; + if (rpl->nr < RPACKSIZ) + nr++; /* add flush block */ + } n = readbuf(rtpd[i][0], (char *)rtbuf, - 4*sizeof(float)*n); + 4*sizeof(float)*nr); if (n < 0) error(SYSTEM, "read failure in flush_queue"); bp = rtbuf; /* process packets */ @@ -287,10 +295,10 @@ killpersist() /* kill persistent process */ FILE *fp; int pid; - if ((fp = fopen(PFILE, "r")) == NULL) + if ((fp = fopen(pfile, "r")) == NULL) return; if (fscanf(fp, "%*s %d", &pid) != 1 || kill(pid, SIGALRM) < 0) - unlink(PFILE); + unlink(pfile); fclose(fp); }