Subject: Re: bug#9726: 24.0.90; vc-dir: error in process sentinel - Wrong argument type

From: Christoph Scholtes <[email-masked]>
Date: Mon, 10 Oct 2011 22:18:24 -0600

On 10/10/2011 10:03 PM, I wrote:
> Running Emacs 24.0.90 (r106044) with Windows 7/64bit.
> The following errors occur when using vc-dir in the Emacs /bin directory
> of the trunk tree:
>
> error in process sentinel: vc-dir-node-directory: Wrong type argument:
> arrayp, nil
> error in process sentinel: Wrong type argument: arrayp, nil
>
> Recipe (from trunk\bin directory!):
> emacs -Q
> M-x vc-dir
> C-j
> error occurs

Elisp backtrace:

Debugger entered--Lisp error: (wrong-type-argument arrayp nil)
   apply(debug error (wrong-type-argument arrayp nil))
   edebug(error (wrong-type-argument arrayp nil))
   signal(wrong-type-argument (arrayp nil))
   edebug-signal(wrong-type-argument (arrayp nil))
   ewoc-data(nil)
   vc-dir-node-directory(nil)
   vc-dir-update((("." nil) ("COPYING" unregistered)) #<buffer *vc-dir*>)
   (edebug-after (edebug-before 2) 5 (vc-dir-update (edebug-after 0 3 
entries) (edebug-after 0 4 (symbol-value G47125))))
   (save-current-buffer (set-buffer (edebug-after 0 1 (symbol-value 
G47125))) (edebug-after (edebug-before 2) 5 (vc-dir-update (edebug-after 
0 3 entries) (edebug-after 0 4 (symbol-value G47125)))) (edebug-after 
(edebug-before 6) 23 (if (edebug-after 0 7 more-to-come) nil 
(edebug-after (edebug-before 8) 22 (let ((remaining (edebug-after ... 11 
...))) (edebug-after (edebug-before 12) 21 (if (edebug-after 0 13 
remaining) (edebug-after ... 18 ...) (edebug-after ... 20 ...))))))))
   (edebug-after (edebug-before 0) 24 (save-current-buffer (set-buffer 
(edebug-after 0 1 (symbol-value G47125))) (edebug-after (edebug-before 
2) 5 (vc-dir-update (edebug-after 0 3 entries) (edebug-after 0 4 
(symbol-value G47125)))) (edebug-after (edebug-before 6) 23 (if 
(edebug-after 0 7 more-to-come) nil (edebug-after (edebug-before 8) 22 
(let ((remaining ...)) (edebug-after (edebug-before 12) 21 (if ... ... 
...))))))))
   (lambda (G47125) (edebug-after (edebug-before 0) 24 
(save-current-buffer (set-buffer (edebug-after 0 1 (symbol-value 
G47125))) (edebug-after (edebug-before 2) 5 (vc-dir-update (edebug-after 
0 3 entries) (edebug-after 0 4 (symbol-value G47125)))) (edebug-after 
(edebug-before 6) 23 (if (edebug-after 0 7 more-to-come) nil 
(edebug-after (edebug-before 8) 22 (let (...) (edebug-after ... 21 
...))))))))(--buffer--)
   apply((lambda (G47125) (edebug-after (edebug-before 0) 24 
(save-current-buffer (set-buffer (edebug-after 0 1 (symbol-value 
G47125))) (edebug-after (edebug-before 2) 5 (vc-dir-update (edebug-after 
0 3 entries) (edebug-after 0 4 (symbol-value G47125)))) (edebug-after 
(edebug-before 6) 23 (if (edebug-after 0 7 more-to-come) nil 
(edebug-after (edebug-before 8) 22 (let (...) (edebug-after ... 21 
...)))))))) --buffer-- nil)
   (lambda (&rest --cl-rest--) (apply (quote (lambda (G47125) 
(edebug-after (edebug-before 0) 24 (save-current-buffer (set-buffer 
(edebug-after 0 1 ...)) (edebug-after (edebug-before 2) 5 (vc-dir-update 
... ...)) (edebug-after (edebug-before 6) 23 (if ... nil ...)))))) 
(quote --buffer--) --cl-rest--))()
   edebug-enter(edebug-anon2 ((("." nil) ("COPYING" unregistered)) nil) 
(lambda (&rest --cl-rest--) (apply (quote (lambda (G47125) (edebug-after 
(edebug-before 0) 24 (save-current-buffer (set-buffer (edebug-after 0 1 
...)) (edebug-after (edebug-before 2) 5 (vc-dir-update ... ...)) 
(edebug-after (edebug-before 6) 23 (if ... nil ...)))))) (quote 
--buffer--) --cl-rest--)))
   edebug-enter(edebug-anon2 ((("." nil) ("COPYING" unregistered)) nil) 
(lambda (&rest --cl-rest--) (apply (quote (lambda (G47125) (edebug-after 
(edebug-before 0) 24 (save-current-buffer (set-buffer (edebug-after 0 1 
...)) (edebug-after (edebug-before 2) 5 (vc-dir-update ... ...)) 
(edebug-after (edebug-before 6) 23 (if ... nil ...)))))) (quote 
--buffer--) --cl-rest--)))
   (lambda (G47126 entries &optional more-to-come) (edebug-enter (quote 
edebug-anon2) (list entries more-to-come) (list (quote lambda) (quote 
(&rest --cl-rest--)) (list (quote apply) (list (quote quote) (function 
(lambda (G47125) (edebug-after ... 24 ...)))) (list (quote quote) 
G47126) (quote --cl-rest--)))))(--buffer-- (("." nil) ("COPYING" 
unregistered)))
   apply((lambda (G47126 entries &optional more-to-come) (edebug-enter 
(quote edebug-anon2) (list entries more-to-come) (list (quote lambda) 
(quote (&rest --cl-rest--)) (list (quote apply) (list (quote quote) 
(function (lambda (G47125) (edebug-after ... 24 ...)))) (list (quote 
quote) G47126) (quote --cl-rest--))))) --buffer-- (("." nil) ("COPYING" 
unregistered)))
   (lambda (&rest --cl-rest--) (apply (quote (lambda (G47126 entries 
&optional more-to-come) (edebug-enter (quote edebug-anon2) (list entries 
more-to-come) (list (quote lambda) (quote (&rest --cl-rest--)) (list 
(quote apply) (list ... ...) (list ... G47126) (quote --cl-rest--)))))) 
(quote --buffer--) --cl-rest--))((("." nil) ("COPYING" unregistered)))
   vc-bzr-after-dir-status((lambda (&rest --cl-rest--) (apply (quote 
(lambda (G47126 entries &optional more-to-come) (edebug-enter (quote 
edebug-anon2) (list entries more-to-come) (list (quote lambda) (quote 
(&rest --cl-rest--)) (list (quote apply) (list ... ...) (list ... 
G47126) (quote --cl-rest--)))))) (quote --buffer--) --cl-rest--)) "bin/")
   eval((vc-bzr-after-dir-status (quote (lambda (&rest --cl-rest--) 
(apply (quote (lambda (G47126 entries &optional more-to-come) 
(edebug-enter (quote edebug-anon2) (list entries more-to-come) (list ... 
... ...)))) (quote --buffer--) --cl-rest--))) (file-relative-name 
"d:/devel/emacs/emacs-bzr/trunk_jenkins/bin/" (vc-bzr-root 
"d:/devel/emacs/emacs-bzr/trunk_jenkins/bin/"))))
   vc-exec-after((vc-bzr-after-dir-status (quote (lambda (&rest 
--cl-rest--) (apply (quote (lambda (G47126 entries &optional 
more-to-come) (edebug-enter (quote edebug-anon2) (list entries 
more-to-come) (list ... ... ...)))) (quote --buffer--) --cl-rest--))) 
(file-relative-name "d:/devel/emacs/emacs-bzr/trunk_jenkins/bin/" 
(vc-bzr-root "d:/devel/emacs/emacs-bzr/trunk_jenkins/bin/"))))
   vc-process-sentinel(#<process bzr> "finished\n")
   recursive-edit()
   edebug-recursive-edit()
   edebug-display()
   edebug-debugger(45 after nil)
   edebug-after(42 45 nil)
   (save-current-buffer (set-buffer (edebug-after 0 36 
vc-dir-process-buffer)) (edebug-after (edebug-before 37) 39 (setq 
default-directory (edebug-after 0 38 def-dir))) (edebug-after 
(edebug-before 40) 41 (erase-buffer)) (edebug-after (edebug-before 42) 
45 (vc-call-backend (edebug-after 0 43 backend) (quote dir-status) 
(edebug-after 0 44 def-dir) (list (quote lambda) (quote (&rest 
--cl-rest--)) (list (quote apply) (list (quote quote) (function (lambda 
... ...))) (list (quote quote) --cl-buffer--) (quote --cl-rest--))))))
   (edebug-after (edebug-before 35) 46 (save-current-buffer (set-buffer 
(edebug-after 0 36 vc-dir-process-buffer)) (edebug-after (edebug-before 
37) 39 (setq default-directory (edebug-after 0 38 def-dir))) 
(edebug-after (edebug-before 40) 41 (erase-buffer)) (edebug-after 
(edebug-before 42) 45 (vc-call-backend (edebug-after 0 43 backend) 
(quote dir-status) (edebug-after 0 44 def-dir) (list (quote lambda) 
(quote (&rest --cl-rest--)) (list (quote apply) (list (quote quote) 
(function ...)) (list (quote quote) --cl-buffer--) (quote --cl-rest--)))))))
   (let ((--cl-buffer-- (make-symbol "--buffer--"))) (setf (symbol-value 
--cl-buffer--) (edebug-after (edebug-before 33) 34 (current-buffer))) 
(edebug-after (edebug-before 35) 46 (save-current-buffer (set-buffer 
(edebug-after 0 36 vc-dir-process-buffer)) (edebug-after (edebug-before 
37) 39 (setq default-directory (edebug-after 0 38 def-dir))) 
(edebug-after (edebug-before 40) 41 (erase-buffer)) (edebug-after 
(edebug-before 42) 45 (vc-call-backend (edebug-after 0 43 backend) 
(quote dir-status) (edebug-after 0 44 def-dir) (list (quote lambda) 
(quote (&rest --cl-rest--)) (list (quote apply) (list ... ...) (list ... 
--cl-buffer--) (quote --cl-rest--))))))))
   (lexical-let ((buffer (edebug-after (edebug-before 33) 34 
(current-buffer)))) (edebug-after (edebug-before 35) 46 
(with-current-buffer (edebug-after 0 36 vc-dir-process-buffer) 
(edebug-after (edebug-before 37) 39 (setq default-directory 
(edebug-after 0 38 def-dir))) (edebug-after (edebug-before 40) 41 
(erase-buffer)) (edebug-after (edebug-before 42) 45 (vc-call-backend 
(edebug-after 0 43 backend) (quote dir-status) (edebug-after 0 44 
def-dir) (lambda (entries &optional more-to-come) (edebug-enter (quote 
edebug-anon2) (list entries more-to-come) (function ...))))))))
   (edebug-after (edebug-before 32) 47 (lexical-let ((buffer 
(edebug-after (edebug-before 33) 34 (current-buffer)))) (edebug-after 
(edebug-before 35) 46 (with-current-buffer (edebug-after 0 36 
vc-dir-process-buffer) (edebug-after (edebug-before 37) 39 (setq 
default-directory (edebug-after 0 38 def-dir))) (edebug-after 
(edebug-before 40) 41 (erase-buffer)) (edebug-after (edebug-before 42) 
45 (vc-call-backend (edebug-after 0 43 backend) (quote dir-status) 
(edebug-after 0 44 def-dir) (lambda (entries &optional more-to-come) 
(edebug-enter ... ... ...))))))))
   (let ((def-dir (edebug-after 0 6 default-directory)) (backend 
(edebug-after 0 7 vc-dir-backend))) (edebug-after (edebug-before 8) 9 
(vc-set-mode-line-busy-indicator)) (edebug-after (edebug-before 10) 21 
(unless (edebug-after (edebug-before 11) 13 (buffer-live-p (edebug-after 
0 12 vc-dir-process-buffer))) (edebug-after (edebug-before 14) 20 (setq 
vc-dir-process-buffer (edebug-after (edebug-before 15) 19 
(generate-new-buffer (edebug-after ... 18 ...))))))) (edebug-after 
(edebug-before 22) 24 (ewoc-map (lambda (info) (edebug-enter (quote 
edebug-anon1) (list info) (function (lambda nil (edebug-after ... 9 
...))))) (edebug-after 0 23 vc-ewoc))) (edebug-after (edebug-before 25) 
31 (ewoc-set-hf (edebug-after 0 26 vc-ewoc) (edebug-after (edebug-before 
27) 30 (vc-dir-headers (edebug-after 0 28 backend) (edebug-after 0 29 
def-dir))) "")) (edebug-after (edebug-before 32) 47 (lexical-let 
((buffer (edebug-after (edebug-before 33) 34 (current-buffer)))) 
(edebug-after (edebug-before 35) 46 (with-current-buffer (edebug-after 0 
36 vc-dir-process-buffer) (edebug-after (edebug-before 37) 39 (setq 
default-directory (edebug-after 0 38 def-dir))) (edebug-after 
(edebug-before 40) 41 (erase-buffer)) (edebug-after (edebug-before 42) 
45 (vc-call-backend (edebug-after 0 43 backend) (quote dir-status) 
(edebug-after 0 44 def-dir) (lambda ... ...))))))))
   (edebug-after (edebug-before 5) 48 (let ((def-dir (edebug-after 0 6 
default-directory)) (backend (edebug-after 0 7 vc-dir-backend))) 
(edebug-after (edebug-before 8) 9 (vc-set-mode-line-busy-indicator)) 
(edebug-after (edebug-before 10) 21 (unless (edebug-after (edebug-before 
11) 13 (buffer-live-p (edebug-after 0 12 vc-dir-process-buffer))) 
(edebug-after (edebug-before 14) 20 (setq vc-dir-process-buffer 
(edebug-after (edebug-before 15) 19 (generate-new-buffer ...)))))) 
(edebug-after (edebug-before 22) 24 (ewoc-map (lambda (info) 
(edebug-enter (quote edebug-anon1) (list info) (function (lambda nil 
...)))) (edebug-after 0 23 vc-ewoc))) (edebug-after (edebug-before 25) 
31 (ewoc-set-hf (edebug-after 0 26 vc-ewoc) (edebug-after (edebug-before 
27) 30 (vc-dir-headers (edebug-after 0 28 backend) (edebug-after 0 29 
def-dir))) "")) (edebug-after (edebug-before 32) 47 (lexical-let 
((buffer (edebug-after (edebug-before 33) 34 (current-buffer)))) 
(edebug-after (edebug-before 35) 46 (with-current-buffer (edebug-after 0 
36 vc-dir-process-buffer) (edebug-after (edebug-before 37) 39 (setq 
default-directory ...)) (edebug-after (edebug-before 40) 41 
(erase-buffer)) (edebug-after (edebug-before 42) 45 (vc-call-backend ... 
... ... ...))))))))
   (if (edebug-after (edebug-before 1) 2 (vc-dir-busy)) (edebug-after 
(edebug-before 3) 4 (error "Another update process is in progress, 
cannot run two at a time")) (edebug-after (edebug-before 5) 48 (let 
((def-dir (edebug-after 0 6 default-directory)) (backend (edebug-after 0 
7 vc-dir-backend))) (edebug-after (edebug-before 8) 9 
(vc-set-mode-line-busy-indicator)) (edebug-after (edebug-before 10) 21 
(unless (edebug-after (edebug-before 11) 13 (buffer-live-p (edebug-after 
0 12 vc-dir-process-buffer))) (edebug-after (edebug-before 14) 20 (setq 
vc-dir-process-buffer (edebug-after ... 19 ...))))) (edebug-after 
(edebug-before 22) 24 (ewoc-map (lambda (info) (edebug-enter (quote 
edebug-anon1) (list info) (function ...))) (edebug-after 0 23 vc-ewoc))) 
(edebug-after (edebug-before 25) 31 (ewoc-set-hf (edebug-after 0 26 
vc-ewoc) (edebug-after (edebug-before 27) 30 (vc-dir-headers 
(edebug-after 0 28 backend) (edebug-after 0 29 def-dir))) "")) 
(edebug-after (edebug-before 32) 47 (lexical-let ((buffer (edebug-after 
... 34 ...))) (edebug-after (edebug-before 35) 46 (with-current-buffer 
(edebug-after 0 36 vc-dir-process-buffer) (edebug-after ... 39 ...) 
(edebug-after ... 41 ...) (edebug-after ... 45 ...))))))))
   (edebug-after (edebug-before 0) 49 (if (edebug-after (edebug-before 
1) 2 (vc-dir-busy)) (edebug-after (edebug-before 3) 4 (error "Another 
update process is in progress, cannot run two at a time")) (edebug-after 
(edebug-before 5) 48 (let ((def-dir (edebug-after 0 6 
default-directory)) (backend (edebug-after 0 7 vc-dir-backend))) 
(edebug-after (edebug-before 8) 9 (vc-set-mode-line-busy-indicator)) 
(edebug-after (edebug-before 10) 21 (unless (edebug-after (edebug-before 
11) 13 (buffer-live-p ...)) (edebug-after (edebug-before 14) 20 (setq 
vc-dir-process-buffer ...)))) (edebug-after (edebug-before 22) 24 
(ewoc-map (lambda (info) (edebug-enter ... ... ...)) (edebug-after 0 23 
vc-ewoc))) (edebug-after (edebug-before 25) 31 (ewoc-set-hf 
(edebug-after 0 26 vc-ewoc) (edebug-after (edebug-before 27) 30 
(vc-dir-headers ... ...)) "")) (edebug-after (edebug-before 32) 47 
(lexical-let ((buffer ...)) (edebug-after (edebug-before 35) 46 
(with-current-buffer ... ... ... ...))))))))
   (lambda nil (edebug-after (edebug-before 0) 49 (if (edebug-after 
(edebug-before 1) 2 (vc-dir-busy)) (edebug-after (edebug-before 3) 4 
(error "Another update process is in progress, cannot run two at a 
time")) (edebug-after (edebug-before 5) 48 (let ((def-dir (edebug-after 
0 6 default-directory)) (backend (edebug-after 0 7 vc-dir-backend))) 
(edebug-after (edebug-before 8) 9 (vc-set-mode-line-busy-indicator)) 
(edebug-after (edebug-before 10) 21 (unless (edebug-after ... 13 ...) 
(edebug-after ... 20 ...))) (edebug-after (edebug-before 22) 24 
(ewoc-map (lambda ... ...) (edebug-after 0 23 vc-ewoc))) (edebug-after 
(edebug-before 25) 31 (ewoc-set-hf (edebug-after 0 26 vc-ewoc) 
(edebug-after ... 30 ...) "")) (edebug-after (edebug-before 32) 47 
(lexical-let (...) (edebug-after ... 46 ...))))))))()
   edebug-enter(vc-dir-refresh nil (lambda nil (edebug-after 
(edebug-before 0) 49 (if (edebug-after (edebug-before 1) 2 
(vc-dir-busy)) (edebug-after (edebug-before 3) 4 (error "Another update 
process is in progress, cannot run two at a time")) (edebug-after 
(edebug-before 5) 48 (let ((def-dir (edebug-after 0 6 
default-directory)) (backend (edebug-after 0 7 vc-dir-backend))) 
(edebug-after (edebug-before 8) 9 (vc-set-mode-line-busy-indicator)) 
(edebug-after (edebug-before 10) 21 (unless (edebug-after ... 13 ...) 
(edebug-after ... 20 ...))) (edebug-after (edebug-before 22) 24 
(ewoc-map (lambda ... ...) (edebug-after 0 23 vc-ewoc))) (edebug-after 
(edebug-before 25) 31 (ewoc-set-hf (edebug-after 0 26 vc-ewoc) 
(edebug-after ... 30 ...) "")) (edebug-after (edebug-before 32) 47 
(lexical-let (...) (edebug-after ... 46 ...)))))))))
   vc-dir-refresh()
   vc-dir-mode()
   (edebug-after (edebug-before 41) 42 (vc-dir-mode))
   (let ((use-vc-backend (edebug-after 0 40 backend))) (edebug-after 
(edebug-before 41) 42 (vc-dir-mode)))
   (edebug-after (edebug-before 39) 43 (let ((use-vc-backend 
(edebug-after 0 40 backend))) (edebug-after (edebug-before 41) 42 
(vc-dir-mode))))
   (if (edebug-after (edebug-before 35) 36 (derived-mode-p (quote 
vc-dir-mode))) (edebug-after (edebug-before 37) 38 (vc-dir-refresh)) 
(edebug-after (edebug-before 39) 43 (let ((use-vc-backend (edebug-after 
0 40 backend))) (edebug-after (edebug-before 41) 42 (vc-dir-mode)))))
   (edebug-after (edebug-before 34) 44 (if (edebug-after (edebug-before 
35) 36 (derived-mode-p (quote vc-dir-mode))) (edebug-after 
(edebug-before 37) 38 (vc-dir-refresh)) (edebug-after (edebug-before 39) 
43 (let ((use-vc-backend (edebug-after 0 40 backend))) (edebug-after 
(edebug-before 41) 42 (vc-dir-mode))))))
   (lambda nil (edebug-after (edebug-before 18) 25 (unless (edebug-after 
0 19 backend) (edebug-after (edebug-before 20) 24 (setq backend 
(edebug-after (edebug-before 21) 23 (vc-responsible-backend 
(edebug-after 0 22 dir))))))) (edebug-after (edebug-before 26) 33 (let 
(pop-up-windows) (edebug-after (edebug-before 27) 32 (pop-to-buffer 
(edebug-after (edebug-before 28) 31 (vc-dir-prepare-status-buffer 
"*vc-dir*" (edebug-after 0 29 dir) (edebug-after 0 30 backend))))))) 
(edebug-after (edebug-before 34) 44 (if (edebug-after (edebug-before 35) 
36 (derived-mode-p (quote vc-dir-mode))) (edebug-after (edebug-before 
37) 38 (vc-dir-refresh)) (edebug-after (edebug-before 39) 43 (let 
((use-vc-backend (edebug-after 0 40 backend))) (edebug-after 
(edebug-before 41) 42 (vc-dir-mode)))))))()
   edebug-enter(vc-dir ("d:/devel/emacs/emacs-bzr/trunk_jenkins/bin" 
nil) (lambda nil (edebug-after (edebug-before 18) 25 (unless 
(edebug-after 0 19 backend) (edebug-after (edebug-before 20) 24 (setq 
backend (edebug-after (edebug-before 21) 23 (vc-responsible-backend 
(edebug-after 0 22 dir))))))) (edebug-after (edebug-before 26) 33 (let 
(pop-up-windows) (edebug-after (edebug-before 27) 32 (pop-to-buffer 
(edebug-after (edebug-before 28) 31 (vc-dir-prepare-status-buffer 
"*vc-dir*" (edebug-after 0 29 dir) (edebug-after 0 30 backend))))))) 
(edebug-after (edebug-before 34) 44 (if (edebug-after (edebug-before 35) 
36 (derived-mode-p (quote vc-dir-mode))) (edebug-after (edebug-before 
37) 38 (vc-dir-refresh)) (edebug-after (edebug-before 39) 43 (let 
((use-vc-backend (edebug-after 0 40 backend))) (edebug-after 
(edebug-before 41) 42 (vc-dir-mode))))))))
   edebug-enter(vc-dir ("d:/devel/emacs/emacs-bzr/trunk_jenkins/bin" 
nil) (lambda nil (edebug-after (edebug-before 18) 25 (unless 
(edebug-after 0 19 backend) (edebug-after (edebug-before 20) 24 (setq 
backend (edebug-after (edebug-before 21) 23 (vc-responsible-backend 
(edebug-after 0 22 dir))))))) (edebug-after (edebug-before 26) 33 (let 
(pop-up-windows) (edebug-after (edebug-before 27) 32 (pop-to-buffer 
(edebug-after (edebug-before 28) 31 (vc-dir-prepare-status-buffer 
"*vc-dir*" (edebug-after 0 29 dir) (edebug-after 0 30 backend))))))) 
(edebug-after (edebug-before 34) 44 (if (edebug-after (edebug-before 35) 
36 (derived-mode-p (quote vc-dir-mode))) (edebug-after (edebug-before 
37) 38 (vc-dir-refresh)) (edebug-after (edebug-before 39) 43 (let 
((use-vc-backend (edebug-after 0 40 backend))) (edebug-after 
(edebug-before 41) 42 (vc-dir-mode))))))))
   vc-dir("d:/devel/emacs/emacs-bzr/trunk_jenkins/bin" nil)
   call-interactively(vc-dir t nil)
   execute-extended-command(nil)
   call-interactively(execute-extended-command nil nil)