]> gitweb.factorcode.org Git - factor.git/commitdiff
vm/os-unix.cpp: set pipe file descriptors to close on exec
authorSlava Pestov <slava@slava-pestovs-macbook-pro.local>
Thu, 16 Sep 2010 05:20:24 +0000 (22:20 -0700)
committerSlava Pestov <slava@slava-pestovs-macbook-pro.local>
Thu, 16 Sep 2010 05:20:24 +0000 (22:20 -0700)
vm/os-unix.cpp

index 2e4aed436e6465acf0a2ac49730789f33dde461a..08ea8643c4a35f0598a6a17cd2b89c4c36fa975d 100755 (executable)
@@ -324,28 +324,28 @@ void *stdin_loop(void *arg)
        return NULL;
 }
 
-void open_console()
+void safe_pipe(int *in, int *out)
 {
        int filedes[2];
 
        if(pipe(filedes) < 0)
-               fatal_error("Error opening control pipe",errno);
-
-       control_read = filedes[0];
-       control_write = filedes[1];
-
-       if(pipe(filedes) < 0)
-               fatal_error("Error opening size pipe",errno);
+               fatal_error("Error opening pipe",errno);
 
-       size_read = filedes[0];
-       size_write = filedes[1];
+       *in = filedes[0];
+       *out = filedes[1];
 
-       if(pipe(filedes) < 0)
-               fatal_error("Error opening stdin pipe",errno);
+       if(fcntl(*in,F_SETFD,FD_CLOEXEC) < 0)
+               fatal_error("Error with fcntl",errno);
 
-       stdin_read = filedes[0];
-       stdin_write = filedes[1];
+       if(fcntl(*out,F_SETFD,FD_CLOEXEC) < 0)
+               fatal_error("Error with fcntl",errno);
+}
 
+void open_console()
+{
+       safe_pipe(&control_read,&control_write);
+       safe_pipe(&size_read,&size_write);
+       safe_pipe(&stdin_read,&stdin_write);
        start_thread(stdin_loop,NULL);
 }