Allow restarting the kernel after shutdown in jupyter-shutdown-kernel

This commit is contained in:
Nathaniel Nicandro 2018-01-13 22:08:14 -06:00
parent 80dd6a51e8
commit dc4c9f7a66

View file

@ -238,19 +238,21 @@ kernel. Starting a kernel involves the following steps:
(jupyter-stop-channel control-channel) (jupyter-stop-channel control-channel)
(oset manager control-channel nil)))) (oset manager control-channel nil))))
(cl-defmethod jupyter-shutdown-kernel ((manager jupyter-kernel-manager) &optional timeout) (cl-defmethod jupyter-shutdown-kernel ((manager jupyter-kernel-manager) &optional restart timeout)
(when (jupyter-kernel-alive-p manager) (when (jupyter-kernel-alive-p manager)
(let ((session (oref manager session)) (let ((session (oref manager session))
(sock (oref (oref manager control-channel) socket))) (sock (oref (oref manager control-channel) socket))
(jupyter-send (msg (jupyter-message-shutdown-request :restart restart)))
session sock "shutdown_request" (jupyter-message-shutdown-request)) (jupyter-send session sock "shutdown_request" msg)
(with-timeout ((or timeout 1) (with-timeout ((or timeout 1)
(delete-process (oref manager kernel)) (delete-process (oref manager kernel))
(display-warning (display-warning
"jupyter" "Kernel did not shutdown by request" :warning)) "jupyter" "Kernel did not shutdown by request" :warning))
(while (jupyter-kernel-alive-p manager) (while (jupyter-kernel-alive-p manager)
(sleep-for 0.01))) (sleep-for 0.01)))
(jupyter-stop-channels manager)))) (if restart
(jupyter-start-kernel manager)
(jupyter-stop-channels manager)))))
(cl-defmethod jupyter-interrupt-kernel ((manager jupyter-kernel-manager) &optional timeout) (cl-defmethod jupyter-interrupt-kernel ((manager jupyter-kernel-manager) &optional timeout)
(pcase (plist-get (oref manager kernel-spec) :interrupt_mode) (pcase (plist-get (oref manager kernel-spec) :interrupt_mode)