* callproc.c (Fcall_process): Avoid vfork clobbering
authorPaul Eggert <eggert@cs.ucla.edu>
Thu, 4 Aug 2011 03:08:01 +0000 (20:08 -0700)
committerPaul Eggert <eggert@cs.ucla.edu>
Thu, 4 Aug 2011 03:08:01 +0000 (20:08 -0700)
the local vars buffer, coding_systems, current_dir.

src/ChangeLog
src/callproc.c

index 726ef7b..1ad5374 100644 (file)
@@ -1,3 +1,8 @@
+2011-08-04  Paul Eggert  <eggert@cs.ucla.edu>
+
+       * callproc.c (Fcall_process): Avoid vfork clobbering
+       the local vars buffer, coding_systems, current_dir.
+
 2011-08-03  Stefan Monnier  <monnier@iro.umontreal.ca>
 
        * keymap.c (Fmake_composed_keymap): Move to subr.el.
index f148f62..3a91be3 100644 (file)
@@ -603,6 +603,9 @@ usage: (call-process PROGRAM &optional INFILE BUFFER DISPLAY &rest ARGS)  */)
 
     /* vfork, and prevent local vars from being clobbered by the vfork.  */
     {
+      Lisp_Object volatile buffer_volatile = buffer;
+      Lisp_Object volatile coding_systems_volatile = coding_systems;
+      Lisp_Object volatile current_dir_volatile = current_dir;
       int volatile fd1_volatile = fd1;
       int volatile fd_error_volatile = fd_error;
       int volatile fd_output_volatile = fd_output;
@@ -611,6 +614,9 @@ usage: (call-process PROGRAM &optional INFILE BUFFER DISPLAY &rest ARGS)  */)
 
       pid = vfork ();
 
+      buffer = buffer_volatile;
+      coding_systems = coding_systems_volatile;
+      current_dir = current_dir_volatile;
       fd1 = fd1_volatile;
       fd_error = fd_error_volatile;
       fd_output = fd_output_volatile;