[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] fix/segfault-from-run-undoable-change 8ee6f96: undo-auto--
From: |
Phillip Lord |
Subject: |
[Emacs-diffs] fix/segfault-from-run-undoable-change 8ee6f96: undo-auto--undoably-changed-buffers maintained in C. |
Date: |
Tue, 17 Nov 2015 12:08:57 +0000 |
branch: fix/segfault-from-run-undoable-change
commit 8ee6f96adee2335331caa6f5e6db938b172c4382
Author: Phillip Lord <address@hidden>
Commit: Phillip Lord <address@hidden>
undo-auto--undoably-changed-buffers maintained in C.
Previously maintained in lisp but this was doing bad things.
---
lisp/simple.el | 14 +++++++-------
src/undo.c | 16 ++++++++++++++++
2 files changed, 23 insertions(+), 7 deletions(-)
diff --git a/lisp/simple.el b/lisp/simple.el
index deb5c88..3d93313 100644
--- a/lisp/simple.el
+++ b/lisp/simple.el
@@ -2869,14 +2869,14 @@ REASON describes the reason that the boundary is being
added; see
(setq undo-auto--current-boundary-timer
(run-at-time 10 nil #'undo-auto--boundary-timer))))
-(defvar undo-auto--undoably-changed-buffers nil
- "List of buffers that have changed recently.
+;; (defvar undo-auto--undoably-changed-buffers nil
+;; "List of buffers that have changed recently.
-This list is maintained by `undo-auto--undoable-change' and
-`undo-auto--boundaries' and can be affected by changes to their
-default values.
+;; This list is maintained by `undo-auto--undoable-change' and
+;; `undo-auto--boundaries' and can be affected by changes to their
+;; default values.
-See also `undo-auto--buffer-undoably-changed'.")
+;; See also `undo-auto--buffer-undoably-changed'.")
(defun undo-auto--add-boundary ()
"Add an `undo-boundary' in appropriate buffers."
@@ -2920,7 +2920,7 @@ behaviour."
(defun undo-auto--undoable-change ()
"Called after every undoable buffer change."
- (add-to-list 'undo-auto--undoably-changed-buffers (current-buffer))
+ ;;(add-to-list 'undo-auto--undoably-changed-buffers (current-buffer))
(undo-auto--boundary-ensure-timer))
;; End auto-boundary section
diff --git a/src/undo.c b/src/undo.c
index 214beae..0b7f144 100644
--- a/src/undo.c
+++ b/src/undo.c
@@ -37,6 +37,14 @@ static Lisp_Object pending_boundary;
static void
run_undoable_change (void)
{
+ if( NILP (Fmemq
+ (Fcurrent_buffer(),
+ Vundo_auto__undoably_changed_buffers))){
+ Fset (Qundo_auto__undoably_changed_buffers,
+ Fcons (Fcurrent_buffer(),
+ Vundo_auto__undoably_changed_buffers));
+ }
+
call0 (Qundo_auto__undoable_change);
}
@@ -446,6 +454,14 @@ syms_of_undo (void)
defsubr (&Sundo_boundary);
+ DEFSYM (Qundo_auto__undoably_changed_buffers,
+ "undo-auto--undoably-changed-buffers");
+
+ DEFVAR_LISP ("undo-auto--undoably-changed-buffers",
+ Vundo_auto__undoably_changed_buffers,
+ doc: /* We can write the doc later */ );
+ Vundo_auto__undoably_changed_buffers = Qnil;
+
DEFVAR_INT ("undo-limit", undo_limit,
doc: /* Keep no more undo information once it exceeds this size.
This limit is applied when garbage collection happens.