[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/aggressive-indent e1c17ab 38/43: Consistently kill time
From: |
Stefan Monnier |
Subject: |
[elpa] externals/aggressive-indent e1c17ab 38/43: Consistently kill timer safely, avoiding a race condition |
Date: |
Wed, 7 Jul 2021 22:49:46 -0400 (EDT) |
branch: externals/aggressive-indent
commit e1c17abb4aa714c2f5b2a2a4b45c4cd72d69a155
Author: Steve Purcell <steve@sanityinc.com>
Commit: Steve Purcell <steve@sanityinc.com>
Consistently kill timer safely, avoiding a race condition
---
aggressive-indent.el | 27 ++++++++++++---------------
1 file changed, 12 insertions(+), 15 deletions(-)
diff --git a/aggressive-indent.el b/aggressive-indent.el
index 3622a76..c21f367 100644
--- a/aggressive-indent.el
+++ b/aggressive-indent.el
@@ -459,34 +459,32 @@ If BODY finishes, `while-no-input' returns whatever value
BODY produced."
nil)
(t val)))))))
+(defun aggressive-indent--maybe-cancel-timer ()
+ "Cancel and remove the timer if it is set."
+ (when (timerp aggressive-indent--idle-timer)
+ (cancel-timer aggressive-indent--idle-timer)
+ (setq aggressive-indent--idle-timer nil)))
+
(defun aggressive-indent--indent-if-changed (buffer)
"Indent any region that changed in BUFFER in the last command loop."
(if (not (buffer-live-p buffer))
- (cancel-timer aggressive-indent--idle-timer)
+ (aggressive-indent--maybe-cancel-timer)
(with-current-buffer buffer
(when (and aggressive-indent-mode aggressive-indent--changed-list)
(save-excursion
(save-selected-window
(aggressive-indent--while-no-input
(aggressive-indent--proccess-changed-list-and-indent))))
- (when (timerp aggressive-indent--idle-timer)
- (cancel-timer aggressive-indent--idle-timer))))))
+ (aggressive-indent--maybe-cancel-timer)))))
(defun aggressive-indent--keep-track-of-changes (l r &rest _)
"Store the limits (L and R) of each change in the buffer."
(when aggressive-indent-mode
(push (list l r) aggressive-indent--changed-list)
- (when (timerp aggressive-indent--idle-timer)
- (cancel-timer aggressive-indent--idle-timer))
+ (aggressive-indent--maybe-cancel-timer)
(setq aggressive-indent--idle-timer
(run-with-idle-timer aggressive-indent-sit-for-time t
#'aggressive-indent--indent-if-changed (current-buffer)))))
-(defun aggressive-indent--on-buffer-kill ()
- "Cancel the timer before buffer is killed"
- (when (timerp aggressive-indent--idle-timer)
- (cancel-timer aggressive-indent--idle-timer)
- (setq aggressive-indent--idle-timer nil)))
-
;;; Minor modes
;;;###autoload
(define-minor-mode aggressive-indent-mode
@@ -517,15 +515,14 @@ If BODY finishes, `while-no-input' returns whatever value
BODY produced."
(add-hook 'after-change-functions
#'aggressive-indent--keep-track-of-changes nil 'local)
(add-hook 'after-revert-hook #'aggressive-indent--clear-change-list
nil 'local)
(add-hook 'before-save-hook
#'aggressive-indent--proccess-changed-list-and-indent nil 'local)
- (add-hook 'kill-buffer-hook #'aggressive-indent--on-buffer-kill nil
'local))
+ (add-hook 'kill-buffer-hook #'aggressive-indent--maybe-cancel-timer
nil 'local))
;; Clean the hooks
- (when (timerp aggressive-indent--idle-timer)
- (cancel-timer aggressive-indent--idle-timer))
+ (aggressive-indent--maybe-cancel-timer)
(remove-hook 'after-change-functions
#'aggressive-indent--keep-track-of-changes 'local)
(remove-hook 'after-revert-hook #'aggressive-indent--clear-change-list
'local)
(remove-hook 'before-save-hook
#'aggressive-indent--proccess-changed-list-and-indent 'local)
(remove-hook 'post-command-hook #'aggressive-indent--softly-indent-defun
'local)
- (remove-hook 'kill-buffer-hook #'aggressive-indent--on-buffer-kill
'local)))
+ (remove-hook 'kill-buffer-hook #'aggressive-indent--maybe-cancel-timer
'local)))
(defun aggressive-indent--local-electric (on)
"Turn variable `electric-indent-mode' on or off locally, as per boolean ON."
- [elpa] externals/aggressive-indent 4994a50 21/43: Revert "Make the idle timer not be buffer local", (continued)
- [elpa] externals/aggressive-indent 4994a50 21/43: Revert "Make the idle timer not be buffer local", Stefan Monnier, 2021/07/07
- [elpa] externals/aggressive-indent 6549951 23/43: Backport while-no-input from Emacs 27.0 to fix #111, Stefan Monnier, 2021/07/07
- [elpa] externals/aggressive-indent c39dbff 24/43: Merge pull request #118 from oscarfv/master, Stefan Monnier, 2021/07/07
- [elpa] externals/aggressive-indent 3803f24 30/43: Merge pull request #125 from CeleritasCelery/revert, Stefan Monnier, 2021/07/07
- [elpa] externals/aggressive-indent c28246b 32/43: Merge pull request #129 from yyoncho/master, Stefan Monnier, 2021/07/07
- [elpa] externals/aggressive-indent 113389c 42/43: Merge remote-tracking branch 'elpa/externals/aggressive-indent', Stefan Monnier, 2021/07/07
- [elpa] externals/aggressive-indent f920dd5 27/43: Merge pull request #123 from leungbk/patch, Stefan Monnier, 2021/07/07
- [elpa] externals/aggressive-indent f611f31 33/43: Cancel the timer when buffer is killed, Stefan Monnier, 2021/07/07
- [elpa] externals/aggressive-indent 58348d2 36/43: Merge pull request #135 from leuven65/master, Stefan Monnier, 2021/07/07
- [elpa] externals/aggressive-indent 986df07 40/43: Code actually requires Emacs 24.3, so state that explicitly, Stefan Monnier, 2021/07/07
- [elpa] externals/aggressive-indent e1c17ab 38/43: Consistently kill timer safely, avoiding a race condition,
Stefan Monnier <=
- [elpa] externals/aggressive-indent d5417f4 13/43: Don't indent in ediff-merge buffers, Stefan Monnier, 2021/07/07
- [elpa] externals/aggressive-indent 5a019ef 15/43: Exclude inf-ruby mode, Stefan Monnier, 2021/07/07
- [elpa] externals/aggressive-indent 5b653a5 25/43: Fix typo., Stefan Monnier, 2021/07/07
- [elpa] externals/aggressive-indent e8a6aa8 39/43: Fix typo in function name, Stefan Monnier, 2021/07/07
- [elpa] externals/aggressive-indent cb416fa 43/43: Version 1.10.0, Stefan Monnier, 2021/07/07
- [elpa] externals/aggressive-indent 0492172 12/43: 1.8.4, Stefan Monnier, 2021/07/07
- [elpa] externals/aggressive-indent fdafc53 26/43: Add elm- and haskell-mode., Stefan Monnier, 2021/07/07
- [elpa] externals/aggressive-indent bfd04fc 35/43: Merge pull request #136 from tmurph/master, Stefan Monnier, 2021/07/07
- [elpa] externals/aggressive-indent 12a64b4 37/43: Fix #137 - Trying to select deleted buffers, Stefan Monnier, 2021/07/07
- [elpa] externals/aggressive-indent 584e3f9 29/43: Prevent aggressive-indent-mode from modifying buffer after revert, Stefan Monnier, 2021/07/07