GNU bug report logs - #16003
24.3.50; "Stack overflow in equal" in advice--member-p

Previous Next

Package: emacs;

Reported by: Dmitry Gutov <dgutov <at> yandex.ru>

Date: Fri, 29 Nov 2013 18:04:01 UTC

Severity: normal

Found in version 24.3.50

Done: Stefan Monnier <monnier <at> iro.umontreal.ca>

Bug is archived. No further changes may be made.

To add a comment to this bug, you must first unarchive it, by sending
a message to control AT debbugs.gnu.org, with unarchive 16003 in the body.
You can then email your comments to 16003 AT debbugs.gnu.org in the normal way.

Toggle the display of automated, internal messages from the tracker.

View this report as an mbox folder, status mbox, maintainer mbox


Report forwarded to bug-gnu-emacs <at> gnu.org:
bug#16003; Package emacs. (Fri, 29 Nov 2013 18:04:02 GMT) Full text and rfc822 format available.

Acknowledgement sent to Dmitry Gutov <dgutov <at> yandex.ru>:
New bug report received and forwarded. Copy sent to bug-gnu-emacs <at> gnu.org. (Fri, 29 Nov 2013 18:04:02 GMT) Full text and rfc822 format available.

Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):

From: Dmitry Gutov <dgutov <at> yandex.ru>
To: bug-gnu-emacs <at> gnu.org
Subject: 24.3.50; "Stack overflow in equal" in advice--member-p
Date: Fri, 29 Nov 2013 20:03:16 +0200
I've been getting this kind of errors lately. Unfortunately, I've been
unable to reproduce it from `emacs -Q' so far, but here are two
backtraces, one from `vc-dir-mode', and another from
`diff-hl-dired-mode'.

The problem also usually goes away after restart.

Debugger entered--Lisp error: (error "Stack overflow in equal")
  advice--member-p((closure ((fun closure #1 (p _msg) (let* ((v p) (new (advice--remove-function (process-sentinel v) fun))) (if (eq new (process-sentinel v)) nil (set-process-sentinel v new))) (vc--process-sentinel p code)) (proc . #<process bzr>) (code . #[0 "\302\301\303\300\304\300!\"\"\207" ["/home/gutov/emacs-bzr/trunk/" #[513 "r\300q\210\303.\300\"\210\211?\205%.\304	\305\"\211\203 .\306\307\310.\"\311\"\202#.\312\211.\262.)\207" [#<buffer trunk/*vc-dir*> vc-ewoc mode-line-process vc-dir-update ewoc-collect vc-dir-fileinfo->needs-update vc-dir-refresh-files mapcar vc-dir-fileinfo->name up-to-date nil] 7 "\n\n(fn ENTRIES &optional MORE-TO-COME)"] vc-bzr-after-dir-status file-relative-name vc-bzr-root] 6 "\n\n(fn)"]) vc-sentinel-movepoint vc-log-fileset t) (p _msg) (let* ((v p) (new (advice--remove-function (process-sentinel v) fun))) (if (eq new (process-sentinel v)) nil (set-process-sentinel v new))) (vc--process-sentinel p code)) nil #[128 "\300\302.\"\300\301.\"\210\207" [apply (closure ((fun closure #3 (p _msg) (let* ((v p) (new ...)) (if (eq new ...) nil (set-process-sentinel v new))) (vc--process-sentinel p code)) (proc . #<process bzr>) (code closure ((status . #<process bzr>) (squeezed "status" "--no-classify" "-v" "-S" "./") (full-command . "bzr status --no-classify -v -S ./") (files "./") (flags "status" "--no-classify" "-v" "-S" "./") (file-or-list . "/home/gutov/emacs-bzr/trunk/") (command . "bzr") (okstatus . async) (buffer . #<buffer  *VC-Bzr* tmp status>) w32-quote-process-args vc-sentinel-movepoint vc-log-fileset t) nil (run-hook-with-args (quote vc-post-command-functions) command file-or-list flags)) vc-sentinel-movepoint vc-log-fileset t) (p _msg) (let* ((v p) (new (advice--remove-function (process-sentinel v) fun))) (if (eq new (process-sentinel v)) nil (set-process-sentinel v new))) (vc--process-sentinel p code)) ignore nil] 5 #("Advised function" 0 16 (dynamic-docstring-function advice--make-docstring)) nil])
  advice--add-function(:after ((closure ((v . #<process bzr>) (fun closure (#3 (proc . #<process bzr>) (code . #[0 "\302\301\303\300\304\300!\"\"\207" ["/home/gutov/emacs-bzr/trunk/" #[513 "r\300q\210\303.\300\"\210\211?\205%.\304	\305\"\211\203 .\306\307\310.\"\311\"\202#.\312\211.\262.)\207" [#<buffer trunk/*vc-dir*> vc-ewoc mode-line-process vc-dir-update ewoc-collect vc-dir-fileinfo->needs-update vc-dir-refresh-files mapcar vc-dir-fileinfo->name up-to-date nil] 7 "\n\n(fn ENTRIES &optional MORE-TO-COME)"] vc-bzr-after-dir-status file-relative-name vc-bzr-root] 6 "\n\n(fn)"]) vc-sentinel-movepoint vc-log-fileset t) (p _msg) (let* ((v p) (new (advice--remove-function ... fun))) (if (eq new (process-sentinel v)) nil (set-process-sentinel v new))) (vc--process-sentinel p code)) (proc . #<process bzr>) (code . #[0 "\302\301\303\300\304\300!\"\"\207" ["/home/gutov/emacs-bzr/trunk/" #[513 "r\300q\210\303.\300\"\210\211?\205%.\304	\305\"\211\203 .\306\307\310.\"\311\"\202#.\312\211.\262.)\207" [#<buffer trunk/*vc-dir*> vc-ewoc mode-line-process vc-dir-update ewoc-collect vc-dir-fileinfo->needs-update vc-dir-refresh-files mapcar vc-dir-fileinfo->name up-to-date nil] 7 "\n\n(fn ENTRIES &optional MORE-TO-COME)"] vc-bzr-after-dir-status file-relative-name vc-bzr-root] 6 "\n\n(fn)"]) vc-sentinel-movepoint vc-log-fileset t) nil (process-sentinel v)) closure ((v . #<process bzr>) (fun closure (#2 (proc . #<process bzr>) (code . #[0 "\302\301\303\300\304\300!\"\"\207" ["/home/gutov/emacs-bzr/trunk/" #[513 "r\300q\210\303.\300\"\210\211?\205%.\304	\305\"\211\203 .\306\307\310.\"\311\"\202#.\312\211.\262.)\207" [#<buffer trunk/*vc-dir*> vc-ewoc mode-line-process vc-dir-update ewoc-collect vc-dir-fileinfo->needs-update vc-dir-refresh-files mapcar vc-dir-fileinfo->name up-to-date nil] 7 "\n\n(fn ENTRIES &optional MORE-TO-COME)"] vc-bzr-after-dir-status file-relative-name vc-bzr-root] 6 "\n\n(fn)"]) vc-sentinel-movepoint vc-log-fileset t) (p _msg) (let* ((v p) (new (advice--remove-function (process-sentinel v) fun))) (if (eq new (process-sentinel v)) nil (set-process-sentinel v new))) (vc--process-sentinel p code)) (proc . #<process bzr>) (code . #[0 "\302\301\303\300\304\300!\"\"\207" ["/home/gutov/emacs-bzr/trunk/" #[513 "r\300q\210\303.\300\"\210\211?\205%.\304	\305\"\211\203 .\306\307\310.\"\311\"\202#.\312\211.\262.)\207" [#<buffer trunk/*vc-dir*> vc-ewoc mode-line-process vc-dir-update ewoc-collect vc-dir-fileinfo->needs-update vc-dir-refresh-files mapcar vc-dir-fileinfo->name up-to-date nil] 7 "\n\n(fn ENTRIES &optional MORE-TO-COME)"] vc-bzr-after-dir-status file-relative-name vc-bzr-root] 6 "\n\n(fn)"]) vc-sentinel-movepoint vc-log-fileset t) (gv--val) (set-process-sentinel v gv--val)) (closure ((fun closure #1 (p _msg) (let* ((v p) (new (advice--remove-function (process-sentinel v) fun))) (if (eq new (process-sentinel v)) nil (set-process-sentinel v new))) (vc--process-sentinel p code)) (proc . #<process bzr>) (code . #[0 "\302\301\303\300\304\300!\"\"\207" ["/home/gutov/emacs-bzr/trunk/" #[513 "r\300q\210\303.\300\"\210\211?\205%.\304	\305\"\211\203 .\306\307\310.\"\311\"\202#.\312\211.\262.)\207" [#<buffer trunk/*vc-dir*> vc-ewoc mode-line-process vc-dir-update ewoc-collect vc-dir-fileinfo->needs-update vc-dir-refresh-files mapcar vc-dir-fileinfo->name up-to-date nil] 7 "\n\n(fn ENTRIES &optional MORE-TO-COME)"] vc-bzr-after-dir-status file-relative-name vc-bzr-root] 6 "\n\n(fn)"]) vc-sentinel-movepoint vc-log-fileset t) (p _msg) (let* ((v p) (new (advice--remove-function (process-sentinel v) fun))) (if (eq new (process-sentinel v)) nil (set-process-sentinel v new))) (vc--process-sentinel p code)) nil)
  (let (fun) (setq fun (function (lambda (p _msg) (let* ((v p) (new (advice--remove-function ... fun))) (if (eq new (process-sentinel v)) nil (set-process-sentinel v new))) (vc--process-sentinel p code)))) (advice--add-function :after (let* ((v proc)) (cons (function (lambda nil (process-sentinel v))) (function (lambda (gv--val) (set-process-sentinel v gv--val))))) fun nil))
  (cond ((or (null proc) (eq (process-status proc) (quote exit))) (if proc (progn (accept-process-output proc))) (if (functionp code) (funcall code) (eval code))) ((eq (process-status proc) (quote run)) (vc-set-mode-line-busy-indicator) (let (fun) (setq fun (function (lambda (p _msg) (let* (... ...) (if ... nil ...)) (vc--process-sentinel p code)))) (advice--add-function :after (let* ((v proc)) (cons (function (lambda nil ...)) (function (lambda ... ...)))) fun nil))) (t (error "Unexpected process state")))
  (let ((proc (get-buffer-process (current-buffer)))) (cond ((or (null proc) (eq (process-status proc) (quote exit))) (if proc (progn (accept-process-output proc))) (if (functionp code) (funcall code) (eval code))) ((eq (process-status proc) (quote run)) (vc-set-mode-line-busy-indicator) (let (fun) (setq fun (function (lambda (p _msg) (let* ... ...) (vc--process-sentinel p code)))) (advice--add-function :after (let* ((v proc)) (cons (function ...) (function ...))) fun nil))) (t (error "Unexpected process state"))))
  vc-exec-after(#[0 "\302\301\303\300\304\300!\"\"\207" ["/home/gutov/emacs-bzr/trunk/" #[513 "r\300q\210\303.\300\"\210\211?\205%.\304	\305\"\211\203 .\306\307\310.\"\311\"\202#.\312\211.\262.)\207" [#<buffer trunk/*vc-dir*> vc-ewoc mode-line-process vc-dir-update ewoc-collect vc-dir-fileinfo->needs-update vc-dir-refresh-files mapcar vc-dir-fileinfo->name up-to-date nil] 7 "\n\n(fn ENTRIES &optional MORE-TO-COME)"] vc-bzr-after-dir-status file-relative-name vc-bzr-root] 6 "\n\n(fn)"])
  vc-bzr-dir-status("/home/gutov/emacs-bzr/trunk/" #[513 "r\300q\210\303.\300\"\210\211?\205%.\304	\305\"\211\203 .\306\307\310.\"\311\"\202#.\312\211.\262.)\207" [#<buffer trunk/*vc-dir*> vc-ewoc mode-line-process vc-dir-update ewoc-collect vc-dir-fileinfo->needs-update vc-dir-refresh-files mapcar vc-dir-fileinfo->name up-to-date nil] 7 "\n\n(fn ENTRIES &optional MORE-TO-COME)"])
  apply(vc-bzr-dir-status ("/home/gutov/emacs-bzr/trunk/" #[513 "r\300q\210\303.\300\"\210\211?\205%.\304	\305\"\211\203 .\306\307\310.\"\311\"\202#.\312\211.\262.)\207" [#<buffer trunk/*vc-dir*> vc-ewoc mode-line-process vc-dir-update ewoc-collect vc-dir-fileinfo->needs-update vc-dir-refresh-files mapcar vc-dir-fileinfo->name up-to-date nil] 7 "\n\n(fn ENTRIES &optional MORE-TO-COME)"]))
  vc-call-backend(Bzr dir-status "/home/gutov/emacs-bzr/trunk/" #[513 "r\300q\210\303.\300\"\210\211?\205%.\304	\305\"\211\203 .\306\307\310.\"\311\"\202#.\312\211.\262.)\207" [#<buffer trunk/*vc-dir*> vc-ewoc mode-line-process vc-dir-update ewoc-collect vc-dir-fileinfo->needs-update vc-dir-refresh-files mapcar vc-dir-fileinfo->name up-to-date nil] 7 "\n\n(fn ENTRIES &optional MORE-TO-COME)"])
  vc-dir-refresh()
  vc-dir-mode()
  (let ((use-vc-backend backend)) (vc-dir-mode))
  (if (derived-mode-p (quote vc-dir-mode)) nil (let ((use-vc-backend backend)) (vc-dir-mode)))
  (let* ((file (or buffer-file-name default-directory)) (backend (vc-responsible-backend file)) (dir (vc-call-backend backend (quote root) file))) (let (pop-up-windows) (pop-to-buffer (vc-dir-prepare-status-buffer "*vc-dir*" dir backend))) (if (derived-mode-p (quote vc-dir-mode)) nil (let ((use-vc-backend backend)) (vc-dir-mode))))
  vc-dir-quick()
  ...

And the second one:

Debugger entered--Lisp error: (error "Stack overflow in equal")
  advice--member-p((closure ((fun closure #1 (p _msg) (let* ((v p) (new (advice--remove-function (process-sentinel v) fun))) (if (eq new (process-sentinel v)) nil (set-process-sentinel v new))) (vc--process-sentinel p code)) (proc . #<process git>) (code closure ((update-function closure ((files-alist) (dirs-alist) (buffer . #<buffer definitions>) (def-dir . "~/.emacs.d/elpa/yasnippet-20131127.2134/snippets/ruby-mode/definitions/") (backend . Git) t) (entries &optional _more-to-come) (save-current-buffer (set-buffer buffer) (let (...) (while --dolist-tail-- ...)) (if (get-buffer-process diff-hl-dired-process-buffer) nil (diff-hl-dired-highlight-items ...)))) (files) (stage . update-index) cl-struct-vc-git-extra-fileinfo-tags t) nil (vc-git-after-dir-status-stage stage files update-function)) vc-sentinel-movepoint vc-log-fileset t) (p _msg) (let* ((v p) (new (advice--remove-function (process-sentinel v) fun))) (if (eq new (process-sentinel v)) nil (set-process-sentinel v new))) (vc--process-sentinel p code)) nil #[128 "\300\302.\"\300\301.\"\210\207" [apply (closure ((fun closure #3 (p _msg) (let* ((v p) (new ...)) (if (eq new ...) nil (set-process-sentinel v new))) (vc--process-sentinel p code)) (proc . #<process git>) (code closure ((status . #<process git>) (squeezed "--no-pager" "update-index" "--refresh") (full-command . "git --no-pager update-index --refresh .") (files) (flags "--no-pager" "update-index" "--refresh") (file-or-list) (command . "git") (okstatus . async) (buffer . #<buffer  *diff-hl-dired* tmp status-194855>) w32-quote-process-args vc-sentinel-movepoint vc-log-fileset t) nil (run-hook-with-args (quote vc-post-command-functions) command file-or-list flags)) vc-sentinel-movepoint vc-log-fileset t) (p _msg) (let* ((v p) (new (advice--remove-function (process-sentinel v) fun))) (if (eq new (process-sentinel v)) nil (set-process-sentinel v new))) (vc--process-sentinel p code)) ignore nil] 5 #("Advised function" 0 16 (dynamic-docstring-function advice--make-docstring)) nil])
  advice--add-function(:after ((closure ((v . #<process git>) (fun closure (#3 (proc . #<process git>) (code closure ((update-function closure ... ... ...) (files) (stage . update-index) cl-struct-vc-git-extra-fileinfo-tags t) nil (vc-git-after-dir-status-stage stage files update-function)) vc-sentinel-movepoint vc-log-fileset t) (p _msg) (let* ((v p) (new (advice--remove-function ... fun))) (if (eq new (process-sentinel v)) nil (set-process-sentinel v new))) (vc--process-sentinel p code)) (proc . #<process git>) (code closure ((update-function closure ((files-alist) (dirs-alist) (buffer . #<buffer definitions>) (def-dir . "~/.emacs.d/elpa/yasnippet-20131127.2134/snippets/ruby-mode/definitions/") (backend . Git) t) (entries &optional _more-to-come) (save-current-buffer (set-buffer buffer) (let ... ...) (if ... nil ...))) (files) (stage . update-index) cl-struct-vc-git-extra-fileinfo-tags t) nil (vc-git-after-dir-status-stage stage files update-function)) vc-sentinel-movepoint vc-log-fileset t) nil (process-sentinel v)) closure ((v . #<process git>) (fun closure (#2 (proc . #<process git>) (code closure ((update-function closure (... ... ... ... ... t) (entries &optional _more-to-come) (save-current-buffer ... ... ...)) (files) (stage . update-index) cl-struct-vc-git-extra-fileinfo-tags t) nil (vc-git-after-dir-status-stage stage files update-function)) vc-sentinel-movepoint vc-log-fileset t) (p _msg) (let* ((v p) (new (advice--remove-function (process-sentinel v) fun))) (if (eq new (process-sentinel v)) nil (set-process-sentinel v new))) (vc--process-sentinel p code)) (proc . #<process git>) (code closure ((update-function closure ((files-alist) (dirs-alist) (buffer . #<buffer definitions>) (def-dir . "~/.emacs.d/elpa/yasnippet-20131127.2134/snippets/ruby-mode/definitions/") (backend . Git) t) (entries &optional _more-to-come) (save-current-buffer (set-buffer buffer) (let (...) (while --dolist-tail-- ...)) (if (get-buffer-process diff-hl-dired-process-buffer) nil (diff-hl-dired-highlight-items ...)))) (files) (stage . update-index) cl-struct-vc-git-extra-fileinfo-tags t) nil (vc-git-after-dir-status-stage stage files update-function)) vc-sentinel-movepoint vc-log-fileset t) (gv--val) (set-process-sentinel v gv--val)) (closure ((fun closure #1 (p _msg) (let* ((v p) (new (advice--remove-function (process-sentinel v) fun))) (if (eq new (process-sentinel v)) nil (set-process-sentinel v new))) (vc--process-sentinel p code)) (proc . #<process git>) (code closure ((update-function closure ((files-alist) (dirs-alist) (buffer . #<buffer definitions>) (def-dir . "~/.emacs.d/elpa/yasnippet-20131127.2134/snippets/ruby-mode/definitions/") (backend . Git) t) (entries &optional _more-to-come) (save-current-buffer (set-buffer buffer) (let (...) (while --dolist-tail-- ...)) (if (get-buffer-process diff-hl-dired-process-buffer) nil (diff-hl-dired-highlight-items ...)))) (files) (stage . update-index) cl-struct-vc-git-extra-fileinfo-tags t) nil (vc-git-after-dir-status-stage stage files update-function)) vc-sentinel-movepoint vc-log-fileset t) (p _msg) (let* ((v p) (new (advice--remove-function (process-sentinel v) fun))) (if (eq new (process-sentinel v)) nil (set-process-sentinel v new))) (vc--process-sentinel p code)) nil)
  (let (fun) (setq fun (function (lambda (p _msg) (let* ((v p) (new (advice--remove-function ... fun))) (if (eq new (process-sentinel v)) nil (set-process-sentinel v new))) (vc--process-sentinel p code)))) (advice--add-function :after (let* ((v proc)) (cons (function (lambda nil (process-sentinel v))) (function (lambda (gv--val) (set-process-sentinel v gv--val))))) fun nil))
  (cond ((or (null proc) (eq (process-status proc) (quote exit))) (if proc (progn (accept-process-output proc))) (if (functionp code) (funcall code) (eval code))) ((eq (process-status proc) (quote run)) (vc-set-mode-line-busy-indicator) (let (fun) (setq fun (function (lambda (p _msg) (let* (... ...) (if ... nil ...)) (vc--process-sentinel p code)))) (advice--add-function :after (let* ((v proc)) (cons (function (lambda nil ...)) (function (lambda ... ...)))) fun nil))) (t (error "Unexpected process state")))
  (let ((proc (get-buffer-process (current-buffer)))) (cond ((or (null proc) (eq (process-status proc) (quote exit))) (if proc (progn (accept-process-output proc))) (if (functionp code) (funcall code) (eval code))) ((eq (process-status proc) (quote run)) (vc-set-mode-line-busy-indicator) (let (fun) (setq fun (function (lambda (p _msg) (let* ... ...) (vc--process-sentinel p code)))) (advice--add-function :after (let* ((v proc)) (cons (function ...) (function ...))) fun nil))) (t (error "Unexpected process state"))))
  vc-exec-after((closure ((update-function closure ((files-alist) (dirs-alist) (buffer . #<buffer definitions>) (def-dir . "~/.emacs.d/elpa/yasnippet-20131127.2134/snippets/ruby-mode/definitions/") (backend . Git) t) (entries &optional _more-to-come) (save-current-buffer (set-buffer buffer) (let ((--dolist-tail-- entries)) (while --dolist-tail-- (let (...) (progn ...) (setq --dolist-tail-- ...)))) (if (get-buffer-process diff-hl-dired-process-buffer) nil (diff-hl-dired-highlight-items (append dirs-alist files-alist))))) (files) (stage . update-index) cl-struct-vc-git-extra-fileinfo-tags t) nil (vc-git-after-dir-status-stage stage files update-function)))
  vc-git-dir-status-goto-stage(update-index nil (closure ((files-alist) (dirs-alist) (buffer . #<buffer definitions>) (def-dir . "~/.emacs.d/elpa/yasnippet-20131127.2134/snippets/ruby-mode/definitions/") (backend . Git) t) (entries &optional _more-to-come) (save-current-buffer (set-buffer buffer) (let ((--dolist-tail-- entries)) (while --dolist-tail-- (let ((entry (car --dolist-tail--))) (progn (let* (... ... ...) (let ... ...))) (setq --dolist-tail-- (cdr --dolist-tail--))))) (if (get-buffer-process diff-hl-dired-process-buffer) nil (diff-hl-dired-highlight-items (append dirs-alist files-alist))))))
  vc-git-dir-status("~/.emacs.d/elpa/yasnippet-20131127.2134/snippets/ruby-mode/definitions/" (closure ((files-alist) (dirs-alist) (buffer . #<buffer definitions>) (def-dir . "~/.emacs.d/elpa/yasnippet-20131127.2134/snippets/ruby-mode/definitions/") (backend . Git) t) (entries &optional _more-to-come) (save-current-buffer (set-buffer buffer) (let ((--dolist-tail-- entries)) (while --dolist-tail-- (let ((entry (car --dolist-tail--))) (progn (let* (... ... ...) (let ... ...))) (setq --dolist-tail-- (cdr --dolist-tail--))))) (if (get-buffer-process diff-hl-dired-process-buffer) nil (diff-hl-dired-highlight-items (append dirs-alist files-alist))))))
  apply(vc-git-dir-status ("~/.emacs.d/elpa/yasnippet-20131127.2134/snippets/ruby-mode/definitions/" (closure ((files-alist) (dirs-alist) (buffer . #<buffer definitions>) (def-dir . "~/.emacs.d/elpa/yasnippet-20131127.2134/snippets/ruby-mode/definitions/") (backend . Git) t) (entries &optional _more-to-come) (save-current-buffer (set-buffer buffer) (let ((--dolist-tail-- entries)) (while --dolist-tail-- (let ((entry ...)) (progn (let* ... ...)) (setq --dolist-tail-- (cdr --dolist-tail--))))) (if (get-buffer-process diff-hl-dired-process-buffer) nil (diff-hl-dired-highlight-items (append dirs-alist files-alist)))))))
  vc-call-backend(Git dir-status "~/.emacs.d/elpa/yasnippet-20131127.2134/snippets/ruby-mode/definitions/" (closure ((files-alist) (dirs-alist) (buffer . #<buffer definitions>) (def-dir . "~/.emacs.d/elpa/yasnippet-20131127.2134/snippets/ruby-mode/definitions/") (backend . Git) t) (entries &optional _more-to-come) (save-current-buffer (set-buffer buffer) (let ((--dolist-tail-- entries)) (while --dolist-tail-- (let ((entry (car --dolist-tail--))) (progn (let* (... ... ...) (let ... ...))) (setq --dolist-tail-- (cdr --dolist-tail--))))) (if (get-buffer-process diff-hl-dired-process-buffer) nil (diff-hl-dired-highlight-items (append dirs-alist files-alist))))))
  (save-current-buffer (set-buffer diff-hl-dired-process-buffer) (setq default-directory (expand-file-name def-dir)) (erase-buffer) (vc-call-backend backend (quote dir-status) def-dir (function (lambda (entries &optional _more-to-come) (save-current-buffer (set-buffer buffer) (let ((--dolist-tail-- entries)) (while --dolist-tail-- (let ... ... ...))) (if (get-buffer-process diff-hl-dired-process-buffer) nil (diff-hl-dired-highlight-items (append dirs-alist files-alist))))))))
  (progn (diff-hl-dired-clear) (if (buffer-live-p diff-hl-dired-process-buffer) (let ((proc (get-buffer-process diff-hl-dired-process-buffer))) (if proc (progn (kill-process proc)))) (setq diff-hl-dired-process-buffer (generate-new-buffer " *diff-hl-dired* tmp status"))) (save-current-buffer (set-buffer diff-hl-dired-process-buffer) (setq default-directory (expand-file-name def-dir)) (erase-buffer) (vc-call-backend backend (quote dir-status) def-dir (function (lambda (entries &optional _more-to-come) (save-current-buffer (set-buffer buffer) (let (...) (while --dolist-tail-- ...)) (if (get-buffer-process diff-hl-dired-process-buffer) nil (diff-hl-dired-highlight-items ...))))))))
  (if backend (progn (diff-hl-dired-clear) (if (buffer-live-p diff-hl-dired-process-buffer) (let ((proc (get-buffer-process diff-hl-dired-process-buffer))) (if proc (progn (kill-process proc)))) (setq diff-hl-dired-process-buffer (generate-new-buffer " *diff-hl-dired* tmp status"))) (save-current-buffer (set-buffer diff-hl-dired-process-buffer) (setq default-directory (expand-file-name def-dir)) (erase-buffer) (vc-call-backend backend (quote dir-status) def-dir (function (lambda (entries &optional _more-to-come) (save-current-buffer (set-buffer buffer) (let ... ...) (if ... nil ...))))))))
  (let ((backend (condition-case nil (progn (vc-responsible-backend default-directory)) (error nil))) (def-dir default-directory) (buffer (current-buffer)) dirs-alist files-alist) (if backend (progn (diff-hl-dired-clear) (if (buffer-live-p diff-hl-dired-process-buffer) (let ((proc (get-buffer-process diff-hl-dired-process-buffer))) (if proc (progn (kill-process proc)))) (setq diff-hl-dired-process-buffer (generate-new-buffer " *diff-hl-dired* tmp status"))) (save-current-buffer (set-buffer diff-hl-dired-process-buffer) (setq default-directory (expand-file-name def-dir)) (erase-buffer) (vc-call-backend backend (quote dir-status) def-dir (function (lambda (entries &optional _more-to-come) (save-current-buffer ... ... ...))))))))
  diff-hl-dired-update()
  run-hooks(dired-after-readin-hook)
  dired-revert(t nil)
  revert-buffer(t)
  ...

In GNU Emacs 24.3.50.3 (x86_64-unknown-linux-gnu, GTK+ Version 3.8.6)
 of 2013-11-29 on axl
Bzr revision: 115285 schwab <at> linux-m68k.org-20131129112504-5izsans1kw88maan
Windowing system distributor `The X.Org Foundation', version 11.0.11403000
System Description:	Ubuntu 13.10




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#16003; Package emacs. (Fri, 29 Nov 2013 19:10:02 GMT) Full text and rfc822 format available.

Message #8 received at 16003 <at> debbugs.gnu.org (full text, mbox):

From: Stefan Monnier <monnier <at> iro.umontreal.ca>
To: Dmitry Gutov <dgutov <at> yandex.ru>
Cc: 16003 <at> debbugs.gnu.org
Subject: Re: bug#16003: 24.3.50; "Stack overflow in equal" in advice--member-p
Date: Fri, 29 Nov 2013 14:09:02 -0500
> I've been getting this kind of errors lately.  Unfortunately, I've been
> unable to reproduce it from `emacs -Q' so far, but here are two
> backtraces, one from `vc-dir-mode', and another from
> `diff-hl-dired-mode'.

The patch below should avoid the problem.
But we really should try and improve `equal' not to fail this way.


        Stefan


=== modified file 'lisp/vc/vc-dispatcher.el'
--- lisp/vc/vc-dispatcher.el	2013-11-28 01:49:25 +0000
+++ lisp/vc/vc-dispatcher.el	2013-11-29 19:03:35 +0000
@@ -239,10 +239,12 @@
      ;; If a process is running, add CODE to the sentinel
      ((eq (process-status proc) 'run)
       (vc-set-mode-line-busy-indicator)
-      (letrec ((fun (lambda (p _msg)
-                      (remove-function (process-sentinel p) fun)
+      (let* ((funsym (make-symbol "fun"))
+             (fun (lambda (p _msg)
+                    (remove-function (process-sentinel p) funsym)
                       (vc--process-sentinel p code))))
-        (add-function :after (process-sentinel proc) fun)))
+        (fset funsym fun)
+        (add-function :after (process-sentinel proc) funsym)))
      (t (error "Unexpected process state"))))
   nil)
 





Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#16003; Package emacs. (Fri, 29 Nov 2013 19:51:02 GMT) Full text and rfc822 format available.

Message #11 received at 16003 <at> debbugs.gnu.org (full text, mbox):

From: Jambunathan K <kjambunathan <at> gmail.com>
To: Dmitry Gutov <dgutov <at> yandex.ru>
Cc: 16003 <at> debbugs.gnu.org
Subject: Re: bug#16003: 24.3.50; "Stack overflow in equal" in advice--member-p
Date: Fri, 29 Nov 2013 23:50:25 +0530
Dmitry Gutov <dgutov <at> yandex.ru> writes:

> Debugger entered--Lisp error: (error "Stack overflow in equal")

It would be good audit the usage of `equal' and replace it with `eq'.
The sexps are they nested and circular in nature.







Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#16003; Package emacs. (Fri, 29 Nov 2013 19:52:02 GMT) Full text and rfc822 format available.

Message #14 received at 16003 <at> debbugs.gnu.org (full text, mbox):

From: Stefan Monnier <monnier <at> iro.umontreal.ca>
To: Dmitry Gutov <dgutov <at> yandex.ru>
Cc: 16003 <at> debbugs.gnu.org
Subject: Re: bug#16003: 24.3.50; "Stack overflow in equal" in advice--member-p
Date: Fri, 29 Nov 2013 14:50:58 -0500
> I've been getting this kind of errors lately. Unfortunately, I've been
> unable to reproduce it from `emacs -Q' so far, but here are two
> backtraces, one from `vc-dir-mode', and another from
> `diff-hl-dired-mode'.

I installed a patch in Fequal which should fix such problems.


        Stefan




bug closed, send any further explanations to 16003 <at> debbugs.gnu.org and Dmitry Gutov <dgutov <at> yandex.ru> Request was from Stefan Monnier <monnier <at> iro.umontreal.ca> to control <at> debbugs.gnu.org. (Fri, 29 Nov 2013 20:37:02 GMT) Full text and rfc822 format available.

Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#16003; Package emacs. (Fri, 29 Nov 2013 21:10:01 GMT) Full text and rfc822 format available.

Message #19 received at 16003 <at> debbugs.gnu.org (full text, mbox):

From: Dmitry Gutov <dgutov <at> yandex.ru>
To: Stefan Monnier <monnier <at> iro.umontreal.ca>
Cc: 16003 <at> debbugs.gnu.org
Subject: Re: bug#16003: 24.3.50; "Stack overflow in equal" in advice--member-p
Date: Fri, 29 Nov 2013 23:09:19 +0200
On 29.11.2013 21:50, Stefan Monnier wrote:
> I installed a patch in Fequal which should fix such problems.

Thanks!





bug archived. Request was from Debbugs Internal Request <help-debbugs <at> gnu.org> to internal_control <at> debbugs.gnu.org. (Sat, 28 Dec 2013 12:24:03 GMT) Full text and rfc822 format available.

This bug report was last modified 11 years and 260 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.