--- ray/src/hd/rholo2l.c 2016/03/04 02:48:14 3.17 +++ ray/src/hd/rholo2l.c 2025/01/22 18:28:32 3.23 @@ -1,5 +1,5 @@ #ifndef lint -static const char RCSid[] = "$Id: rholo2l.c,v 3.17 2016/03/04 02:48:14 greg Exp $"; +static const char RCSid[] = "$Id: rholo2l.c,v 3.23 2025/01/22 18:28:32 greg Exp $"; #endif /* * Routines for local rtrace execution @@ -23,9 +23,9 @@ int nprocs = 0; /* running process count */ static char pfile[] = TEMPLATE; /* persist file name */ -static SUBPROC rtpd[MAXPROC]; /* process descriptors */ +static SUBPROC rtpd[MAXPROC]; /* process descriptors */ static float *rtbuf = NULL; /* allocated i/o buffer */ -static int maxqlen = 0; /* maximum packets per queue */ +static int maxqlen; /* maximum packets per queue */ static PACKET *pqueue[MAXPROC]; /* packet queues */ static int pqlen[MAXPROC]; /* packet queue lengths */ @@ -37,7 +37,7 @@ static PACKET * get_packets(int poll); static void killpersist(void); -extern int +int start_rtrace(void) /* start rtrace process */ { static char buf1[8]; @@ -59,6 +59,7 @@ start_rtrace(void) /* start rtrace process */ rtargv[rtargc++] = "-I-"; rtargv[rtargc++] = "-h-"; rtargv[rtargc++] = "-ld-"; + rtargv[rtargc++] = "-co-"; sprintf(buf1, "%d", RPACKSIZ); rtargv[rtargc++] = "-x"; rtargv[rtargc++] = buf1; rtargv[rtargc++] = "-y"; rtargv[rtargc++] = "0"; @@ -78,11 +79,9 @@ start_rtrace(void) /* start rtrace process */ psiz = open_process(&rtpd[nprocs], rtargv); if (psiz <= 0) error(SYSTEM, "cannot start rtrace process"); - n = psiz/(RPACKSIZ*6*sizeof(float)); - if (maxqlen == 0) { - if (!(maxqlen = n)) - error(INTERNAL, - "bad pipe buffer size assumption"); + n = psiz/(RPACKSIZ*6*sizeof(float)) + 1; + if (!maxqlen) { + maxqlen = n; sleep(2); } else if (n != maxqlen) error(INTERNAL, "varying pipe buffer size!"); @@ -99,7 +98,7 @@ static int bestout(void) /* get best process to process packet */ { int cnt; - register int pn, i; + int pn, i; pn = 0; /* find shortest queue */ for (i = 1; i < nprocs; i++) @@ -113,7 +112,7 @@ bestout(void) /* get best process to process packet if (pqlen[i] == pqlen[pn]) cnt++; /* break ties fairly */ - if ((cnt = random() % cnt)) + if ((cnt = irandom(cnt))) for (i = pn; i < nprocs; i++) if (pqlen[i] == pqlen[pn] && !cnt--) return(i); @@ -124,8 +123,8 @@ bestout(void) /* get best process to process packet static int slots_avail(void) /* count packet slots available */ { - register int nslots = 0; - register int i; + int nslots = 0; + int i; for (i = nprocs; i--; ) nslots += maxqlen - pqlen[i]; @@ -135,7 +134,7 @@ slots_avail(void) /* count packet slots available */ static void queue_packet( /* queue up a beam packet */ - register PACKET *p + PACKET *p ) { int pn, n; @@ -146,13 +145,13 @@ queue_packet( /* queue up a beam packet */ packrays(rtbuf, p); if ((n = p->nr) < RPACKSIZ) /* add flush block? */ memset((char *)(rtbuf+6*n++), '\0', 6*sizeof(float)); - if (writebuf(rtpd[pn].w, (char *)rtbuf, 6*sizeof(float)*n) < 0) + if (writebuf(rtpd[pn].w, rtbuf, 6*sizeof(float)*n) < 0) error(SYSTEM, "write error in queue_packet"); p->next = NULL; if (!pqlen[pn]++) /* add it to the end of the queue */ pqueue[pn] = p; else { - register PACKET *rpl = pqueue[pn]; + PACKET *rpl = pqueue[pn]; while (rpl->next != NULL) rpl = rpl->next; rpl->next = p; @@ -168,9 +167,9 @@ get_packets( /* read packets from rtrace processes */ static struct timeval tpoll; /* zero timeval struct */ fd_set readset, errset; PACKET *pldone = NULL, *plend; - register PACKET *p; + PACKET *p; int n, nr; - register int pn; + int pn; float *bp; /* prepare select call */ FD_ZERO(&readset); FD_ZERO(&errset); n = 0; @@ -240,12 +239,12 @@ eoferr: } -extern PACKET * +PACKET * do_packets( /* queue a packet list, return finished */ - register PACKET *pl + PACKET *pl ) { - register PACKET *p; + PACKET *p; /* consistency check */ if (nprocs < 1) error(CONSISTENCY, "do_packets called with no active process"); @@ -258,13 +257,13 @@ do_packets( /* queue a packet list, return finished } -extern PACKET * +PACKET * flush_queue(void) /* empty all rtrace queues */ { PACKET *rpdone = NULL; - register PACKET *rpl = NULL; + PACKET *rpl = NULL; float *bp; - register PACKET *p; + PACKET *p; int i, n, nr; for (i = 0; i < nprocs; i++) @@ -281,8 +280,7 @@ flush_queue(void) /* empty all rtrace queues */ if (rpl->nr < RPACKSIZ) nr++; /* add flush block */ } - n = readbuf(rtpd[i].r, (char *)rtbuf, - 4*sizeof(float)*nr); + n = readbuf(rtpd[i].r, rtbuf, 4*sizeof(float)*nr); if (n < 0) error(SYSTEM, "read failure in flush_queue"); bp = rtbuf; /* process packets */ @@ -317,7 +315,7 @@ killpersist(void) /* kill persistent process */ } -extern int +int end_rtrace(void) /* close rtrace process(es) */ { int status = 0, rv;