changeset 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 2f7395806731
children 31694eae75d8
files src/ChangeLog src/process.c
diffstat 2 files changed, 6 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/src/ChangeLog	Sat May 02 11:32:42 2009 +0000
+++ b/src/ChangeLog	Sat May 02 11:54:43 2009 +0000
@@ -1,5 +1,8 @@
 2009-05-02  Andreas Schwab  <schwab@linux-m68k.org>
 
+	* process.c (read_process_output): Make sure the current buffer is
+	always restored.
+
 	* coding.c (record_conversion_result): Don't modify
 	Vlast_code_conversion_error for successful result.
 	(alloc_destination): Don't clobber conversion result.  (Bug#1650)
--- 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;
 }