Jsonrpc error handlers can now safely call jsonrpc-shutdown
Previously, if an error handler called jsonrpc-shutdown, and if that error handler was being called from the process sentinel, jsonrpc-shutdown would infloop waiting for jsonrpc-sentinel-done to be set. Rename the process property jsonrpc-sentinel-done to jsonrpc-sentinel-cleanup-started, arrange for it to be set earlier in the sentinel, and also check for it earlier in jsonrpc-shutdown. * lisp/jsonrpc.el (Version): Bump to 1.0.7. (jsonrpc--process-sentinel): Set jsonrpc-sentinel-cleanup-started a bit earlier than previous jsonrpc-sentinel-done. (jsonrpc-shutdown): Query jsonrpc-sentinel-cleanup-started
This commit is contained in:
parent
f74595aace
commit
2f65525774
1 changed files with 7 additions and 7 deletions
|
|
@ -6,7 +6,7 @@
|
|||
;; Maintainer: João Távora <joaotavora@gmail.com>
|
||||
;; Keywords: processes, languages, extensions
|
||||
;; Package-Requires: ((emacs "25.2"))
|
||||
;; Version: 1.0.6
|
||||
;; Version: 1.0.7
|
||||
|
||||
;; This is an Elpa :core package. Don't use functionality that is not
|
||||
;; compatible with Emacs 25.2.
|
||||
|
|
@ -421,13 +421,13 @@ connection object, called when the process dies .")
|
|||
With optional CLEANUP, kill any associated buffers. "
|
||||
(unwind-protect
|
||||
(cl-loop
|
||||
with proc = (jsonrpc--process conn)
|
||||
with proc = (jsonrpc--process conn) for i from 0
|
||||
while (not (process-get proc 'jsonrpc-sentinel-cleanup-started))
|
||||
unless (zerop i) do
|
||||
(jsonrpc--warn "Sentinel for %s still hasn't run, deleting it!" proc)
|
||||
do
|
||||
(delete-process proc)
|
||||
(accept-process-output nil 0.1)
|
||||
while (not (process-get proc 'jsonrpc-sentinel-done))
|
||||
do (jsonrpc--warn
|
||||
"Sentinel for %s still hasn't run, deleting it!" proc))
|
||||
(accept-process-output nil 0.1))
|
||||
(when cleanup
|
||||
(kill-buffer (process-buffer (jsonrpc--process conn)))
|
||||
(kill-buffer (jsonrpc-stderr-buffer conn)))))
|
||||
|
|
@ -486,6 +486,7 @@ With optional CLEANUP, kill any associated buffers. "
|
|||
(pcase-let ((`(,_success ,_error ,timeout) triplet))
|
||||
(when timeout (cancel-timer timeout))))
|
||||
(jsonrpc--request-continuations connection))
|
||||
(process-put proc 'jsonrpc-sentinel-cleanup-started t)
|
||||
(unwind-protect
|
||||
;; Call all outstanding error handlers
|
||||
(maphash (lambda (_id triplet)
|
||||
|
|
@ -493,7 +494,6 @@ With optional CLEANUP, kill any associated buffers. "
|
|||
(funcall error '(:code -1 :message "Server died"))))
|
||||
(jsonrpc--request-continuations connection))
|
||||
(jsonrpc--message "Server exited with status %s" (process-exit-status proc))
|
||||
(process-put proc 'jsonrpc-sentinel-done t)
|
||||
(delete-process proc)
|
||||
(funcall (jsonrpc--on-shutdown connection) connection)))))
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue