From ed6366876cf1336984f90c65db48d8a3d5ccafdd Mon Sep 17 00:00:00 2001 From: Sean Whitton Date: Tue, 8 Sep 2026 11:16:20 +0100 Subject: [PATCH] vc-dir--count-outgoing: Check overlay still exists * lisp/vc/vc-dir.el (vc-dir--count-outgoing): Check overlay still exists. --- lisp/vc/vc-dir.el | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/lisp/vc/vc-dir.el b/lisp/vc/vc-dir.el index 1d732ab6d3c..f2e0b2f89fc 100644 --- a/lisp/vc/vc-dir.el +++ b/lisp/vc/vc-dir.el @@ -1521,14 +1521,19 @@ longer needed." See `vc-dir-async-header-values' for an explanation of how this function uses OVERLAY." (cl-flet ((set-overlay-text (text) - (with-current-buffer (overlay-buffer overlay) - (save-excursion - (let ((inhibit-read-only t) - (start (overlay-start overlay))) - (delete-region start (overlay-end overlay)) - (goto-char start) - (insert text) - (move-overlay overlay start (point))))))) + ;; If `vc-dir--set-header' was called again before our + ;; sentinel ran (either because we were still counting or + ;; Emacs just hadn't run the sentinel yet) then the + ;; overlay won't exist anymore. + (when-let* ((buffer (overlay-buffer overlay))) + (with-current-buffer buffer + (save-excursion + (let ((inhibit-read-only t) + (start (overlay-start overlay))) + (delete-region start (overlay-end overlay)) + (goto-char start) + (insert text) + (move-overlay overlay start (point)))))))) (set-overlay-text (propertize "[counting ...]" 'face 'vc-dir-header-value)) ;; `vc-incoming-outgoing-internal' invokes external processes