Sarcasm / irony-mode

A C/C++ minor mode for Emacs powered by libclang
GNU General Public License v3.0
906 stars 99 forks source link

(error "Selecting deleted buffer") #445

Closed netjune closed 6 years ago

netjune commented 6 years ago

After a 3-way ediff, there is an error message as in the title. I think it may be because ediff quickly save and kill some buffer between irony sending parse request and recieving result from the external process.

Debugger entered--Lisp error: (error "Selecting deleted buffer") set-buffer(#) (save-current-buffer (set-buffer buffer) (let ((callbacks irony--parse-buffer-callbacks) (status (cond ((not (equal context ...)) (quote cancelled)) (result (quote success)) (t (quote failed))))) (setq irony--parse-buffer-last-results (list status) irony--parse-buffer-callbacks nil irony--parse-buffer-state (cons context (quote done))) (mapc (function (lambda (cb) (funcall cb status))) callbacks))) irony--parse-request-handler(t 207 #) apply(irony--parse-request-handler t (207 #)) (condition-case err (apply (car callback) sexp (cdr callback)) ((debug error) (message "Warning: %S" err) nil)) (let ((sexp (read response)) (callback (irony--server-process-pop-callback process))) (condition-case err (apply (car callback) sexp (cdr callback)) ((debug error) (message "Warning: %S" err) nil))) irony--process-server-response(# "t\n\n;;EOT\n") (lambda (r) (irony--process-server-response process r))("t\n\n;;EOT\n") mapc((lambda (r) (irony--process-server-response process r)) ("t\n\n;;EOT\n" "t\n\n;;EOT\n")) (let ((pbuf (process-buffer process)) responses) (if (buffer-live-p pbuf) (progn (save-current-buffer (set-buffer pbuf) (save-excursion (goto-char (process-mark process)) (insert output) (set-marker (process-mark process) (point)) (goto-char (point-min)) (while (search-forward irony--eot nil t) (let (...) (delete-region ... ...) (setq responses ...))) (goto-char (process-mark process)))))) (mapc (function (lambda (r) (irony--process-server-response process r))) (nreverse responses))) irony--server-process-filter(# "t\n\n;;EOT\nt\n\n;;EOT\n") read-event() map-y-or-n-p(#[257 "\304!\205X\305!\205X\306!?\205X\307!\204+\301\205X\211q\210 \205X\310 \311V\205X\312\301!\203;r\211q\210\301 )\205X\300\203A\313\207\302\313\240\210\307!\203R\314\315\307!\"\207\314\316\317!\"\207" [nil (lambda nil (eq (current-buffer) file-buffer)) (t) buffer-offer-save buffer-live-p buffer-modified-p buffer-base-buffer buffer-file-name buffer-size 0 functionp t format "Save file %s? " "Save buffer %s? " buffer-name] 5 "\n\n(fn BUFFER)"] #[257 "r\211q\210\300 )\207" [save-buffer] 2 "\n\n(fn BUFFER)"] (#<buffer magit: repo1> # #<buffer Minibuf-1> #<buffer vbox_cloud_server2/main.cpp> # # # # # # # # #<buffer device_center/storeman.cpp> # #<buffer device_center/storeman.hh> # # # # # # # # # #<buffer w_vbox_server_客户端协议.tex> #<buffer w_vbox_server_客户端协议.org> #<buffer gb28181_center/loader_man.cpp> #<buffer device_center/loader_man.cpp> #<buffer gb28181_center/storeman.cpp> # #<buffer device_center/loader_man.hh> # # # #<buffer gb28181_center/loader_man.hh> #<buffer gb28181_center/storeman.hh> # # #<buffer config_server/main.cpp> # # # # # # # # # # # ...) ("buffer" "buffers" "save") ((18 #[257 "\204 \302!\210\211\202\303\304\"\210\305 \210\306\207" [enable-recursive-minibuffers other-window-scroll-buffer display-buffer view-buffer #[257 "\300 \207" [exit-recursive-edit] 2 "\n\n(fn )"] recursive-edit nil] 4 "\n\n(fn BUF)"] "view this buffer") (100 #[257 "\302!\204 \303\304!\210\202/\305\306!\210\307\302!\310\311$\204&\312!\210\211\202.\313\314\"\210\315 \210\210\310\207" [enable-recursive-minibuffers other-window-scroll-buffer buffer-file-name message "Not applicable: no file" require diff diff-no-select nil noasync display-buffer view-buffer #[257 "\300 \207" [exit-recursive-edit] 2 "\n\n(fn )"] recursive-edit] 6 "\n\n(fn BUF)"] "view changes in this buffer"))) save-some-buffers(nil (lambda nil (eq (current-buffer) file-buffer))) (if magit-save-some-buffers (save-some-buffers (eq magit-save-some-buffers (quote dontask)) predicate-function) (if msg (progn (message msg)))) (let ((predicate-function (or pred magit-save-some-buffers-predicate)) (magit-default-directory default-directory)) (if magit-save-some-buffers (save-some-buffers (eq magit-save-some-buffers (quote dontask)) predicate-function) (if msg (progn (message msg))))) magit-save-some-buffers("Conflict resolution finished; you may save the buffer" (lambda nil (eq (current-buffer) file-buffer))) (let ((buffer-A ediff-buffer-A) (buffer-B ediff-buffer-B) (buffer-C ediff-buffer-C) (buffer-Ancestor ediff-ancestor-buffer) (file magit-ediff-file) (file-buffer) (windows magit-ediff-windows)) (ediff-cleanup-mess) (find-file file) (setq file-buffer (current-buffer)) (erase-buffer) (insert-buffer-substring buffer-C) (kill-buffer buffer-A) (kill-buffer buffer-B) (kill-buffer buffer-C) (if (bufferp buffer-Ancestor) (progn (kill-buffer buffer-Ancestor))) (set-window-configuration windows) (magit-save-some-buffers "Conflict resolution finished; you may save the buffer" (function (lambda nil (eq (current-buffer) file-buffer))))) (lambda nil (let ((buffer-A ediff-buffer-A) (buffer-B ediff-buffer-B) (buffer-C ediff-buffer-C) (buffer-Ancestor ediff-ancestor-buffer) (file magit-ediff-file) (file-buffer) (windows magit-ediff-windows)) (ediff-cleanup-mess) (find-file file) (setq file-buffer (current-buffer)) (erase-buffer) (insert-buffer-substring buffer-C) (kill-buffer buffer-A) (kill-buffer buffer-B) (kill-buffer buffer-C) (if (bufferp buffer-Ancestor) (progn (kill-buffer buffer-Ancestor))) (set-window-configuration windows) (magit-save-some-buffers "Conflict resolution finished; you may save the buffer" (function (lambda nil (eq (current-buffer) file-buffer))))))() run-hooks(ediff-quit-hook) ediff-really-quit(nil) ediff-quit(nil) funcall-interactively(ediff-quit nil) call-interactively(ediff-quit nil nil) command-execute(ediff-quit)

netjune commented 6 years ago

There is already an issue with the same problem. So close this.