Add kill-emacs-hook functions for cleaning up clients and managers

If `kill-emacs` is called while the kernel process or client channel processes
are still alive, the process sentinels do not run and thus the cleanup of the
clients and managers does not happen. Thus we need to explicitly do this
cleanup when `kill-emacs` is called.
This commit is contained in:
Nathaniel Nicandro 2018-10-16 13:28:45 -05:00
parent 7b68acbe69
commit 673747dc03
2 changed files with 22 additions and 2 deletions

View file

@ -196,6 +196,13 @@ passed as the argument has a language of LANG."
(set-buffer-modified-p nil))
(kill-buffer (oref client -buffer))))
(defun jupyter-kill-kernel-clients ()
"Call the destructor for all live Jupyter clients."
(dolist (client jupyter--clients)
(destructor client)))
(add-hook 'kill-emacs-hook 'jupyter-kill-kernel-clients)
(defun jupyter-find-client-for-session (session-id)
"Return the `jupyter-kernel-client' for SESSION-ID."
(or (catch 'found

View file

@ -37,8 +37,13 @@
"Jupyter kernel manager"
:group 'jupyter)
(defclass jupyter-kernel-manager ()
((name
(defvar jupyter--managers nil
"A list of all live kernel managers.
Managers are removed from this list when their `destructor' is called.")
(defclass jupyter-kernel-manager (eieio-instance-tracker)
((tracking-symbol :initform 'jupyter--managers)
(name
:initarg :name
:type string
:documentation "The name of the kernel that is being managed.")
@ -81,8 +86,16 @@ default kernel is a python kernel."
;; See `jupyter--kernel-sentinel' for other cleanup
(when (processp (oref manager kernel))
(delete-process (oref manager kernel)))
(delete-instance manager)
(jupyter-stop-channels manager))
(defun jupyter-kill-kernel-managers ()
(dolist (manager jupyter--managers)
(jupyter-shutdown-kernel manager)
(destructor manager)))
(add-hook 'kill-emacs-hook 'jupyter-kill-kernel-managers)
(cl-defgeneric jupyter-make-client ((manager jupyter-kernel-manager) class &rest slots)
"Make a new client from CLASS connected to MANAGER's kernel.
SLOTS are the slots used to initialize the client with.")