emacs-diffs
[Top][All Lists]
Advanced

[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.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]