From 455e4fa13a50cfd3ad0ca765f1aca3e3d30cca6a Mon Sep 17 00:00:00 2001 From: Bob Rogers Date: Sat, 9 Jul 2011 21:42:39 -0400 Subject: [PATCH] * vc/vc.el (vc-diff-internal): Fix race condition (Bug#1256). --- lisp/ChangeLog | 4 ++++ lisp/vc/vc.el | 7 +++++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index f5a6c1eeaf4..40f96b05637 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,7 @@ +2011-07-10 Bob Rogers + + * vc/vc.el (vc-diff-internal): Fix race condition (Bug#1256). + 2011-07-10 Chong Yidong * window.el (display-buffer): Fix arguments to diff --git a/lisp/vc/vc.el b/lisp/vc/vc.el index e3f3c153043..796311f8f66 100644 --- a/lisp/vc/vc.el +++ b/lisp/vc/vc.el @@ -1605,10 +1605,13 @@ Return t if the buffer had changes, nil otherwise." ;; bindings are nicer for read only buffers. pcl-cvs does the ;; same thing. (setq buffer-read-only t) - (vc-exec-after `(vc-diff-finish ,(current-buffer) ',(when verbose - messages))) ;; Display the buffer, but at the end because it can change point. (pop-to-buffer (current-buffer)) + ;; The diff process may finish early, so call `vc-diff-finish' + ;; after `pop-to-buffer'; the former assumes the diff buffer is + ;; shown in some window. + (vc-exec-after `(vc-diff-finish ,(current-buffer) + ',(when verbose messages))) ;; In the async case, we return t even if there are no differences ;; because we don't know that yet. t))) -- 2.39.5