elpy
elpy copied to clipboard
error in process filter: Selecting deleted buffer
Summary
I have a key bound to kill-buffer. Periodically when leaving a python source file by pressing this key, I see the following errors in the Messages buffer:
error in process filter: elpy-rpc--default-error-callback: Selecting deleted buffer
error in process filter: Selecting deleted buffer
This happens fairly rarely and I can't reliably reproduce it.
My configuration
OS
Ubuntu 16.04
Result of (elpy-config)
Elpy Configuration
Emacs.............: 24.5.1
Elpy..............: 1.32.0
Virtualenv........: None
Interactive Python: python 2.7.12 (/usr/bin/python)
RPC virtualenv....: rpc-venv (/home/gyre/.emacs.d/elpy/rpc-venv)
Python...........: python 2.7.12 (/home/gyre/.emacs.d/elpy/rpc-venv/bin/python)
Jedi.............: 0.16.0
Rope.............: 0.16.0
Autopep8.........: 1.5
Yapf.............: 0.29.0
Black............: Not found (19.10b0 available)
Syntax checker....: flake8 (/home/gyre/.local/bin/flake8)
Elpy configuration in my init.el
(elpy-enable)
(defun elpy-goto-definition-or-rgrep ()
"Go to the definition of the symbol at point, if found. Otherwise, run `elpy-rgrep-symbol'."
(interactive)
(ring-insert find-tag-marker-ring (point-marker))
(condition-case nil (elpy-goto-definition)
(error (elpy-rgrep-symbol
(concat "\\(def\\|class\\)\s" (thing-at-point 'symbol) "(")))))
(define-key elpy-mode-map (kbd "M-.") 'elpy-goto-definition-or-rgrep)
(define-key elpy-mode-map (kbd "M-,") 'pop-tag-mark)
Hi, Thanks for reporting.
This is something I have already seen as well. As you said, it is difficult to reproduce, and nothing looks wrong to me in the way Elpy's sentinel are implemented.
It could be very useful to have a traceback of the error it you can manage to catch one with M-x toggle-debug-on-error
.
Debugger entered--Lisp error: (error "Selecting deleted buffer")
signal(error ("Selecting deleted buffer"))
(if (and (consp error-object) (not (consp (car error-object)))) (signal (car error-object) (cdr error-object)) (let ((message (cdr (assq (quote message) error-object))) (code (cdr (assq (quote code) error-object))) (data (cdr (assq (quote data) error-object)))) (cond ((not (numberp code)) (error "Bad response from RPC: %S" error-object)) ((< code 300) (message "Elpy warning: %s" message)) ((< code 500) (error "Elpy error: %s" message)) ((and elpy-rpc-error-timeout elpy-rpc--last-error-popup (<= (float-time) (+ elpy-rpc--last-error-popup elpy-rpc-error-timeout))) (message "Elpy error popup ignored, see `elpy-rpc-error-timeout': %s" message)) ((not elpy-disable-backend-error-display) (let ((config (elpy-config--get-config))) (progn (set-marker help-window-point-marker nil) (let (... ...) (setq help-window-old-frame ...) (let* ... ... ... ...))) (setq elpy-rpc--last-error-popup (float-time)))))))
elpy-rpc--default-error-callback((error "Selecting deleted buffer"))
funcall(elpy-rpc--default-error-callback (error "Selecting deleted buffer"))
(progn (funcall error-callback reason))
(unwind-protect (progn (funcall error-callback reason)) (and (buffer-name temp-buffer) (kill-buffer temp-buffer)))
(save-current-buffer (set-buffer temp-buffer) (unwind-protect (progn (funcall error-callback reason)) (and (buffer-name temp-buffer) (kill-buffer temp-buffer))))
(let ((temp-buffer (generate-new-buffer " *temp*"))) (save-current-buffer (set-buffer temp-buffer) (unwind-protect (progn (funcall error-callback reason)) (and (buffer-name temp-buffer) (kill-buffer temp-buffer)))))
(if (buffer-live-p (elpy-promise-buffer promise)) (save-current-buffer (set-buffer (elpy-promise-buffer promise)) (funcall error-callback reason)) (let ((temp-buffer (generate-new-buffer " *temp*"))) (save-current-buffer (set-buffer temp-buffer) (unwind-protect (progn (funcall error-callback reason)) (and (buffer-name temp-buffer) (kill-buffer temp-buffer))))))
(progn (if (buffer-live-p (elpy-promise-buffer promise)) (save-current-buffer (set-buffer (elpy-promise-buffer promise)) (funcall error-callback reason)) (let ((temp-buffer (generate-new-buffer " *temp*"))) (save-current-buffer (set-buffer temp-buffer) (unwind-protect (progn (funcall error-callback reason)) (and (buffer-name temp-buffer) (kill-buffer temp-buffer)))))))
(if error-callback (progn (if (buffer-live-p (elpy-promise-buffer promise)) (save-current-buffer (set-buffer (elpy-promise-buffer promise)) (funcall error-callback reason)) (let ((temp-buffer (generate-new-buffer " *temp*"))) (save-current-buffer (set-buffer temp-buffer) (unwind-protect (progn (funcall error-callback reason)) (and (buffer-name temp-buffer) (kill-buffer temp-buffer))))))))
(let ((error-callback (elpy-promise-error-callback promise))) (if error-callback (progn (if (buffer-live-p (elpy-promise-buffer promise)) (save-current-buffer (set-buffer (elpy-promise-buffer promise)) (funcall error-callback reason)) (let ((temp-buffer (generate-new-buffer " *temp*"))) (save-current-buffer (set-buffer temp-buffer) (unwind-protect (progn ...) (and ... ...))))))))
(unwind-protect (let ((error-callback (elpy-promise-error-callback promise))) (if error-callback (progn (if (buffer-live-p (elpy-promise-buffer promise)) (save-current-buffer (set-buffer (elpy-promise-buffer promise)) (funcall error-callback reason)) (let ((temp-buffer ...)) (save-current-buffer (set-buffer temp-buffer) (unwind-protect ... ...))))))) (elpy-promise-set-resolved promise))
(progn (unwind-protect (let ((error-callback (elpy-promise-error-callback promise))) (if error-callback (progn (if (buffer-live-p (elpy-promise-buffer promise)) (save-current-buffer (set-buffer ...) (funcall error-callback reason)) (let (...) (save-current-buffer ... ...)))))) (elpy-promise-set-resolved promise)))
(if (not (elpy-promise-resolved-p promise)) (progn (unwind-protect (let ((error-callback (elpy-promise-error-callback promise))) (if error-callback (progn (if (buffer-live-p ...) (save-current-buffer ... ...) (let ... ...))))) (elpy-promise-set-resolved promise))))
elpy-promise-reject([*elpy-promise* (closure ((flymake-error) cl-struct-xref-elpy-location-tags t) (calltip) (eldoc-message (cond ((not calltip) (if elpy-eldoc-show-current-function (progn (let ... ...)))) ((stringp calltip) calltip) (t (let ((name ...) (index ...) (params ...)) (if index (progn ...)) (let (... ...) (if ... ... ...))))))) elpy-rpc--default-error-callback #<killed buffer> nil] (error "Selecting deleted buffer"))
(condition-case err (save-current-buffer (set-buffer (elpy-promise-buffer promise)) (funcall success-callback value)) (error (elpy-promise-reject promise err)))
(progn (condition-case err (save-current-buffer (set-buffer (elpy-promise-buffer promise)) (funcall success-callback value)) (error (elpy-promise-reject promise err))))
(if success-callback (progn (condition-case err (save-current-buffer (set-buffer (elpy-promise-buffer promise)) (funcall success-callback value)) (error (elpy-promise-reject promise err)))))
(let ((success-callback (elpy-promise-success-callback promise))) (if success-callback (progn (condition-case err (save-current-buffer (set-buffer (elpy-promise-buffer promise)) (funcall success-callback value)) (error (elpy-promise-reject promise err))))))
(unwind-protect (let ((success-callback (elpy-promise-success-callback promise))) (if success-callback (progn (condition-case err (save-current-buffer (set-buffer (elpy-promise-buffer promise)) (funcall success-callback value)) (error (elpy-promise-reject promise err)))))) (elpy-promise-set-resolved promise))
(progn (unwind-protect (let ((success-callback (elpy-promise-success-callback promise))) (if success-callback (progn (condition-case err (save-current-buffer (set-buffer ...) (funcall success-callback value)) (error (elpy-promise-reject promise err)))))) (elpy-promise-set-resolved promise)))
(if (not (elpy-promise-resolved-p promise)) (progn (unwind-protect (let ((success-callback (elpy-promise-success-callback promise))) (if success-callback (progn (condition-case err (save-current-buffer ... ...) (error ...))))) (elpy-promise-set-resolved promise))))
elpy-promise-resolve([*elpy-promise* (closure ((flymake-error) cl-struct-xref-elpy-location-tags t) (calltip) (eldoc-message (cond ((not calltip) (if elpy-eldoc-show-current-function (progn (let ... ...)))) ((stringp calltip) calltip) (t (let ((name ...) (index ...) (params ...)) (if index (progn ...)) (let (... ...) (if ... ... ...))))))) elpy-rpc--default-error-callback #<killed buffer> nil] nil)
(if error-object (elpy-promise-reject promise error-object) (elpy-promise-resolve promise result))
(let ((promise (gethash call-id elpy-rpc--backend-callbacks))) (if (not promise) (progn (error "Received a response for unknown call-id %s" call-id))) (remhash call-id elpy-rpc--backend-callbacks) (if error-object (elpy-promise-reject promise error-object) (elpy-promise-resolve promise result)))
(let ((call-id (cdr (assq (quote id) json))) (error-object (cdr (assq (quote error) json))) (result (cdr (assq (quote result) json)))) (let ((promise (gethash call-id elpy-rpc--backend-callbacks))) (if (not promise) (progn (error "Received a response for unknown call-id %s" call-id))) (remhash call-id elpy-rpc--backend-callbacks) (if error-object (elpy-promise-reject promise error-object) (elpy-promise-resolve promise result))))
elpy-rpc--handle-json(((result) (id . 4)))
(cond (did-read-json (delete-region (point-min) line-end) (elpy-rpc--handle-json json)) ((looking-at "elpy-rpc ready\n") (replace-match "") (elpy-rpc--check-backend-version "1.1")) ((looking-at "elpy-rpc ready (\\([^ ]*\\))\n") (let ((rpc-version (match-string 1))) (replace-match "") (elpy-rpc--check-backend-version rpc-version))) ((looking-at ".*No module named elpy\n") (replace-match "") (elpy-config-error "Elpy module not found")) (t (let ((line (buffer-substring (point-min) line-end))) (delete-region (point-min) line-end) (elpy-rpc--handle-unexpected-line line))))
(let ((line-end (point)) (json nil) (did-read-json nil)) (goto-char (point-min)) (condition-case _err (progn (setq json (let ((json-array-type (quote list))) (json-read))) (if (listp json) (setq line-end (1+ (point)) did-read-json t) (goto-char (point-min)))) (error (goto-char (point-min)))) (cond (did-read-json (delete-region (point-min) line-end) (elpy-rpc--handle-json json)) ((looking-at "elpy-rpc ready\n") (replace-match "") (elpy-rpc--check-backend-version "1.1")) ((looking-at "elpy-rpc ready (\\([^ ]*\\))\n") (let ((rpc-version (match-string 1))) (replace-match "") (elpy-rpc--check-backend-version rpc-version))) ((looking-at ".*No module named elpy\n") (replace-match "") (elpy-config-error "Elpy module not found")) (t (let ((line (buffer-substring (point-min) line-end))) (delete-region (point-min) line-end) (elpy-rpc--handle-unexpected-line line)))))
(while (progn (goto-char (point-min)) (search-forward "\n" nil t)) (let ((line-end (point)) (json nil) (did-read-json nil)) (goto-char (point-min)) (condition-case _err (progn (setq json (let ((json-array-type ...)) (json-read))) (if (listp json) (setq line-end (1+ (point)) did-read-json t) (goto-char (point-min)))) (error (goto-char (point-min)))) (cond (did-read-json (delete-region (point-min) line-end) (elpy-rpc--handle-json json)) ((looking-at "elpy-rpc ready\n") (replace-match "") (elpy-rpc--check-backend-version "1.1")) ((looking-at "elpy-rpc ready (\\([^ ]*\\))\n") (let ((rpc-version (match-string 1))) (replace-match "") (elpy-rpc--check-backend-version rpc-version))) ((looking-at ".*No module named elpy\n") (replace-match "") (elpy-config-error "Elpy module not found")) (t (let ((line (buffer-substring ... line-end))) (delete-region (point-min) line-end) (elpy-rpc--handle-unexpected-line line))))))
(save-current-buffer (set-buffer buffer) (goto-char (point-max)) (insert output) (while (progn (goto-char (point-min)) (search-forward "\n" nil t)) (let ((line-end (point)) (json nil) (did-read-json nil)) (goto-char (point-min)) (condition-case _err (progn (setq json (let (...) (json-read))) (if (listp json) (setq line-end (1+ ...) did-read-json t) (goto-char (point-min)))) (error (goto-char (point-min)))) (cond (did-read-json (delete-region (point-min) line-end) (elpy-rpc--handle-json json)) ((looking-at "elpy-rpc ready\n") (replace-match "") (elpy-rpc--check-backend-version "1.1")) ((looking-at "elpy-rpc ready (\\([^ ]*\\))\n") (let ((rpc-version ...)) (replace-match "") (elpy-rpc--check-backend-version rpc-version))) ((looking-at ".*No module named elpy\n") (replace-match "") (elpy-config-error "Elpy module not found")) (t (let ((line ...)) (delete-region (point-min) line-end) (elpy-rpc--handle-unexpected-line line)))))))
(progn (save-current-buffer (set-buffer buffer) (goto-char (point-max)) (insert output) (while (progn (goto-char (point-min)) (search-forward "\n" nil t)) (let ((line-end (point)) (json nil) (did-read-json nil)) (goto-char (point-min)) (condition-case _err (progn (setq json (let ... ...)) (if (listp json) (setq line-end ... did-read-json t) (goto-char ...))) (error (goto-char (point-min)))) (cond (did-read-json (delete-region (point-min) line-end) (elpy-rpc--handle-json json)) ((looking-at "elpy-rpc ready\n") (replace-match "") (elpy-rpc--check-backend-version "1.1")) ((looking-at "elpy-rpc ready (\\([^ ]*\\))\n") (let (...) (replace-match "") (elpy-rpc--check-backend-version rpc-version))) ((looking-at ".*No module named elpy\n") (replace-match "") (elpy-config-error "Elpy module not found")) (t (let (...) (delete-region ... line-end) (elpy-rpc--handle-unexpected-line line))))))))
(if (and buffer (buffer-live-p buffer)) (progn (save-current-buffer (set-buffer buffer) (goto-char (point-max)) (insert output) (while (progn (goto-char (point-min)) (search-forward "\n" nil t)) (let ((line-end (point)) (json nil) (did-read-json nil)) (goto-char (point-min)) (condition-case _err (progn (setq json ...) (if ... ... ...)) (error (goto-char ...))) (cond (did-read-json (delete-region ... line-end) (elpy-rpc--handle-json json)) ((looking-at "elpy-rpc ready\n") (replace-match "") (elpy-rpc--check-backend-version "1.1")) ((looking-at "elpy-rpc ready (\\([^ ]*\\))\n") (let ... ... ...)) ((looking-at ".*No module named elpy\n") (replace-match "") (elpy-config-error "Elpy module not found")) (t (let ... ... ...))))))))
(let ((buffer (process-buffer process))) (if (and buffer (buffer-live-p buffer)) (progn (save-current-buffer (set-buffer buffer) (goto-char (point-max)) (insert output) (while (progn (goto-char (point-min)) (search-forward "\n" nil t)) (let ((line-end ...) (json nil) (did-read-json nil)) (goto-char (point-min)) (condition-case _err (progn ... ...) (error ...)) (cond (did-read-json ... ...) (... ... ...) (... ...) (... ... ...) (t ...))))))))
elpy-rpc--filter(#<process *elpy-rpc [project:/usr/lib/python2.7/dist-packages/ python:/usr/bin/python]*> "{\"result\": null, \"id\": 4}\n")