summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChong Yidong <cyd@stupidchicken.com>2007-02-28 22:21:25 +0000
committerChong Yidong <cyd@stupidchicken.com>2007-02-28 22:21:25 +0000
commitc47a9ed17aa599b4248ef15aec7326546104beee (patch)
tree70e0b767ac6cb1b6e88c770df142d14bb27d2e0f
parentf79b31dba08765d0f4c1412191802e36e5bfdf6e (diff)
downloademacs-c47a9ed17aa599b4248ef15aec7326546104beee.tar.gz
(Fcombine_after_change_execute): Return nil if
combine_after_change_buffer has been invalidated.
-rw-r--r--src/insdel.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/src/insdel.c b/src/insdel.c
index 08043147cdf..7f15f7de52d 100644
--- a/src/insdel.c
+++ b/src/insdel.c
@@ -2351,6 +2351,17 @@ DEFUN ("combine-after-change-execute", Fcombine_after_change_execute,
if (NILP (combine_after_change_list))
return Qnil;
+ /* It is rare for combine_after_change_buffer to be invalid, but
+ possible. It can happen when combine-after-change-calls is
+ non-nil, and insertion calls a file handler (e.g. through
+ lock_file) which scribbles into a temp file -- cyd */
+ if (!BUFFERP (combine_after_change_buffer)
+ || NILP (XBUFFER (combine_after_change_buffer)->name))
+ {
+ combine_after_change_list = Qnil;
+ return Qnil;
+ }
+
record_unwind_protect (Fset_buffer, Fcurrent_buffer ());
Fset_buffer (combine_after_change_buffer);