131 |
|
* process should not be compromised. |
132 |
|
*/ |
133 |
|
|
134 |
– |
#include <stdio.h> |
135 |
– |
#include <sys/types.h> |
136 |
– |
#include <sys/wait.h> /* XXX platform */ |
137 |
– |
|
134 |
|
#include "rtprocess.h" |
135 |
|
#include "ray.h" |
136 |
|
#include "ambient.h" |
137 |
+ |
#include <sys/types.h> |
138 |
+ |
#include <sys/wait.h> |
139 |
|
#include "selcall.h" |
140 |
|
|
141 |
|
#ifndef RAYQLEN |
185 |
|
|
186 |
|
ray_init(otnm); /* load the shared scene */ |
187 |
|
|
190 |
– |
preload_objs(); /* preload auxiliary data */ |
191 |
– |
|
192 |
– |
/* set shared memory boundary */ |
193 |
– |
shm_boundary = (char *)malloc(16); |
194 |
– |
strcpy(shm_boundary, "SHM_BOUNDARY"); |
195 |
– |
|
188 |
|
r_send_next = 0; /* set up queue */ |
189 |
|
r_recv_first = r_recv_next = RAYQLEN; |
190 |
|
|
251 |
|
return(0); |
252 |
|
/* check for full send queue */ |
253 |
|
if (sendq_full()) { |
254 |
< |
RAY mySend; |
263 |
< |
int rval; |
264 |
< |
mySend = *r; |
254 |
> |
RAY mySend = *r; |
255 |
|
/* wait for a result */ |
256 |
< |
rval = ray_presult(r, 0); |
256 |
> |
if (ray_presult(r, 0) <= 0) |
257 |
> |
return(-1); |
258 |
|
/* put new ray in queue */ |
259 |
|
r_queue[r_send_next++] = mySend; |
260 |
< |
return(rval); /* done */ |
260 |
> |
/* XXX r_send_next may now be > RAYQLEN */ |
261 |
> |
return(1); |
262 |
|
} |
263 |
|
/* else add ray to send queue */ |
264 |
|
r_queue[r_send_next++] = *r; |
442 |
|
if (nadd <= 0) |
443 |
|
return; |
444 |
|
ambsync(); /* load any new ambient values */ |
445 |
+ |
if (shm_boundary == NULL) { /* first child process? */ |
446 |
+ |
preload_objs(); /* preload auxiliary data */ |
447 |
+ |
/* set shared memory boundary */ |
448 |
+ |
shm_boundary = (char *)malloc(16); |
449 |
+ |
strcpy(shm_boundary, "SHM_BOUNDARY"); |
450 |
+ |
} |
451 |
|
fflush(NULL); /* clear pending output */ |
452 |
|
while (nadd--) { /* fork each new process */ |
453 |
|
int p0[2], p1[2]; |