diff --git a/guix-jupyter-kernel.scm b/guix-jupyter-kernel.scm index e8df84669157108ecfba9c04adbf7942a555cb24..2200b8198c103d7acf50d37eb1dda4601b31421a 100644 --- a/guix-jupyter-kernel.scm +++ b/guix-jupyter-kernel.scm @@ -91,7 +91,16 @@ was already an inferior associated with STATE, close it." (let ((previous (proxy-state-inferior state))) (when previous + ;; XXX: 'close-inferior' sometimes isn't enough and it ends up being + ;; blocked in waitpid(2) (from 'close-pipe') while the inferior is + ;; stuck in read(2). Thus, forcefully terminate PREVIOUS beforehand. + ;; This leads to an 'inferior-eval' exception because the inferior + ;; doesn't respond, which we catch. + (false-if-exception + (inferior-eval '(primitive-exit 0) previous)) + (close-inferior previous)) + (set-proxy-state-property state %inferior-property inferior)))