Alexandre Julliard : server: Cope with stdio file descriptors being closed on startup.

Alexandre Julliard julliard at winehq.org
Tue Nov 15 13:17:30 CST 2011


Module: wine
Branch: master
Commit: 3acc2068a00e3de505373c75656e3816a6c05710
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=3acc2068a00e3de505373c75656e3816a6c05710

Author: Alexandre Julliard <julliard at winehq.org>
Date:   Tue Nov 15 11:39:42 2011 +0100

server: Cope with stdio file descriptors being closed on startup.

---

 server/request.c |   13 +++++++------
 1 files changed, 7 insertions(+), 6 deletions(-)

diff --git a/server/request.c b/server/request.c
index cea23ef..05c7464 100644
--- a/server/request.c
+++ b/server/request.c
@@ -758,6 +758,10 @@ void open_master_socket(void)
     assert( sizeof(union generic_request) == sizeof(struct request_max_size) );
     assert( sizeof(union generic_reply) == sizeof(struct request_max_size) );
 
+    /* make sure the stdio fds are open */
+    fd = open( "/dev/null", O_RDWR );
+    while (fd >= 0 && fd <= 2) fd = dup( fd );
+
     if (!server_dir) fatal_error( "directory %s cannot be accessed\n", config_dir );
     if (chdir( config_dir ) == -1) fatal_perror( "chdir to %s", config_dir );
     if ((config_dir_fd = open( ".", O_RDONLY )) == -1) fatal_perror( "open %s", config_dir );
@@ -777,12 +781,8 @@ void open_master_socket(void)
             acquire_lock();
 
             /* close stdin and stdout */
-            if ((fd = open( "/dev/null", O_RDWR )) != -1)
-            {
-                dup2( fd, 0 );
-                dup2( fd, 1 );
-                close( fd );
-            }
+            dup2( fd, 0 );
+            dup2( fd, 1 );
 
             /* signal parent */
             dummy = 0;
@@ -813,6 +813,7 @@ void open_master_socket(void)
 
     /* init the process tracing mechanism */
     init_tracing_mechanism();
+    close( fd );
 }
 
 /* master socket timer expiration handler */




More information about the wine-cvs mailing list