changeset 6466:4b3c537e1169

(Fcall_process): Make sure to close descriptors. (call_process_cleanup): Always close descriptor.
author Richard M. Stallman <rms@gnu.org>
date Tue, 22 Mar 1994 20:17:17 +0000
parents 0bd909cf75c3
children 53c14a4f9307
files src/callproc.c
diffstat 1 files changed, 15 insertions(+), 9 deletions(-) [+]
line wrap: on
line diff
--- a/src/callproc.c	Tue Mar 22 14:59:24 1994 +0000
+++ b/src/callproc.c	Tue Mar 22 20:17:17 1994 +0000
@@ -127,8 +127,12 @@
 #else /* not MSDOS */
   register int pid = XFASTINT (Fcdr (fdpid));
 
+
   if (call_process_exited)
-    return Qnil;
+    {
+      close (XFASTINT (Fcar (fdpid)));
+      return Qnil;
+    }
 
   if (EMACS_KILLPG (pid, SIGINT) == 0)
     {
@@ -330,6 +334,8 @@
     synch_process_retcode = 0;
 
 #ifdef MSDOS /* MW, July 1993 */
+    /* ??? Someone who knows MSDOG needs to check whether this properly
+       closes all descriptors that it opens.  */
     pid = run_msdos_command (new_argv, current_dir, filefd, outfilefd);
     close (outfilefd);
     fd1 = -1; /* No harm in closing that one!  */
@@ -337,6 +343,7 @@
     if (fd[0] < 0)
       {
 	unlink (tempfile);
+	close (filefd);
 	report_file_error ("Cannot re-open temporary file", Qnil);
       }
 #else /* not MSDOS */
@@ -355,15 +362,10 @@
       }
 #endif /* not MSDOS */
 
-#if 0
-    /* Tell SIGCHLD handler to look for this pid.  */
-    synch_process_pid = pid;
-    /* Now let SIGCHLD come through.  */
-    sigsetmask (mask);
-#endif
-
     environ = save_environ;
 
+    /* Close most of our fd's, but not fd[0]
+       since we will use that to read input from.  */
     close (filefd);
     if (fd1 >= 0)
       close (fd1);
@@ -371,12 +373,15 @@
 
   if (pid < 0)
     {
-      close (fd[0]);
+      if (fd[0] >= 0)
+	close (fd[0]);
       report_file_error ("Doing vfork", Qnil);
     }
 
   if (XTYPE (buffer) == Lisp_Int)
     {
+      if (fd[0] >= 0)
+	close (fd[0]);
 #ifndef subprocesses
       /* If Emacs has been built with asynchronous subprocess support,
 	 we don't need to do this, I think because it will then have
@@ -386,6 +391,7 @@
       return Qnil;
     }
 
+  /* Enable sending signal if user quits below.  */
   call_process_exited = 0;
 
 #ifdef MSDOS