diff src/process.c @ 103134:9569175bb813

(read_process_output): Make sure the current buffer is always restored.
author Andreas Schwab <schwab@linux-m68k.org>
date Sat, 02 May 2009 11:54:43 +0000
parents e61fae00d13e
children 3fb472c8bc3c
line wrap: on
line diff
--- a/src/process.c	Sat May 02 11:32:42 2009 +0000
+++ b/src/process.c	Sat May 02 11:54:43 2009 +0000
@@ -5185,7 +5185,6 @@
   register int nbytes;
   char *chars;
   register Lisp_Object outstream;
-  register struct buffer *old = current_buffer;
   register struct Lisp_Process *p = XPROCESS (proc);
   register int opoint;
   struct coding_system *coding = proc_decode_coding_system[channel];
@@ -5385,9 +5384,11 @@
       int opoint_byte;
       Lisp_Object text;
       struct buffer *b;
+      int count = SPECPDL_INDEX ();
 
       odeactivate = Vdeactivate_mark;
 
+      record_unwind_protect (Fset_buffer, Fcurrent_buffer ());
       Fset_buffer (p->buffer);
       opoint = PT;
       opoint_byte = PT_BYTE;
@@ -5490,7 +5491,7 @@
 
       current_buffer->read_only = old_read_only;
       SET_PT_BOTH (opoint, opoint_byte);
-      set_buffer_internal (old);
+      unbind_to (count, Qnil);
     }
   return nbytes;
 }