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

Comparing ray/src/rt/devcomm.c (file contents):
Revision 2.12 by schorsch, Tue Mar 30 16:13:01 2004 UTC vs.
Revision 2.16 by greg, Wed Oct 5 17:20:55 2011 UTC

# Line 10 | Line 10 | static const char      RCSid[] = "$Id$";
10   #include "copyright.h"
11  
12   #include <sys/types.h>
13 < #include <sys/wait.h> /* XXX platform specific */
13 > #ifndef _WIN32
14 > #include <sys/wait.h>
15 > #endif
16  
17 + #include "paths.h"
18   #include "platform.h"
19   #include "standard.h"
20   #include "driver.h"
# Line 54 | Line 57 | final_connect(void)                            /* verify and initialize connec
57          getstate();
58                                                  /* set error vectors */
59          erract[COMMAND].pf = comm_comout;
60 +        /*                                      doesn't work with raypcalls.c
61          if (erract[WARNING].pf != NULL)
62                  erract[WARNING].pf = comm_comout;
63 +        */
64          return(&comm_driver);
65   }
66  
# Line 97 | Line 102 | comm_init(                     /* set up and execute driver */
102                  close(p2[0]);
103                  sprintf(pin, "%d", p1[0]);
104                  sprintf(pout, "%d", p2[1]);
105 <                execl(dvcname, dname, pin, pout, id, 0);
105 >                execl(dvcname, dname, pin, pout, id, NULL);
106                  perror(dvcname);
107                  _exit(127);
108          }
# Line 105 | Line 110 | comm_init(                     /* set up and execute driver */
110                  goto syserr;
111          close(p1[0]);
112          close(p2[1]);
113 +        /*
114 +         * Close write stream on exec to avoid multiprocessing deadlock.
115 +         * No use in read stream without it, so set flag there as well.
116 +         */
117 +        fcntl(p1[1], F_SETFD, FD_CLOEXEC);
118 +        fcntl(p2[0], F_SETFD, FD_CLOEXEC);
119          if ((devout = fdopen(p1[1], "w")) == NULL)
120                  goto syserr;
121          if ((devin = fdopen(p2[0], "r")) == NULL)
# Line 136 | Line 147 | comm_close(void)                       /* done with driver */
147          fclose(devin);
148          if (devchild < 0)
149                  return;
150 + #ifndef _WIN32
151          while ((pid = wait(0)) != -1 && pid != devchild)
152                  ;
153 + #endif
154   }
155  
156  

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines