diff --git a/src/main.lisp b/src/main.lisp index 4b40461..9a706fe 100644 --- a/src/main.lisp +++ b/src/main.lisp @@ -345,13 +345,17 @@ (source-definition-error (c) (declare (ignore c)) ; handler-bind printed it out - (sleep 0.3) ; wait until monitor stops... + ;; wait until monitor stops... + (let ((lp:*kernel* *monitoring-kernel*)) + (lp:end-kernel :wait t)) (uiop:quit +os-code-error-bad-source+)) (condition (c) (declare (ignore c)) ; handler-bind printed it out - (log-message :log "What I am doing here?") - (sleep 0.3) ; wait until monitor stops... + (format *error-output* "~%What I am doing here?~%~%") + ;; wait until monitor stops... + (let ((lp:*kernel* *monitoring-kernel*)) + (lp:end-kernel :wait t)) (uiop:quit +os-code-error+))))) ;; done. diff --git a/src/package.lisp b/src/package.lisp index 25ef561..699b7f5 100644 --- a/src/package.lisp +++ b/src/package.lisp @@ -220,6 +220,7 @@ (defpackage #:pgloader.monitor (:use #:cl #:pgloader.params #:pgloader.state) (:export #:with-monitor + #:*monitoring-kernel* #:*monitoring-queue* #:log-message #:new-label diff --git a/src/utils/monitor.lisp b/src/utils/monitor.lisp index ff89e9f..e151caa 100644 --- a/src/utils/monitor.lisp +++ b/src/utils/monitor.lisp @@ -12,6 +12,9 @@ ;;; (in-package :pgloader.monitor) +(defvar *monitoring-kernel* nil + "Internal lparallel kernel to manage the separate monitor thread.") + (defvar *monitoring-queue* nil "Internal lparallel queue where to send and receive messages from.") @@ -130,8 +133,12 @@ (*standard-output* . ,*standard-output*) (*summary-pathname* . ,*summary-pathname*) (*sections* . ',*sections*))) - (lparallel:*kernel* (lp:make-kernel 1 :bindings bindings)) - (*monitoring-channel* (lp:make-channel))) + (kernel (lp:make-kernel 1 :bindings bindings)) + (lparallel:*kernel* kernel)) + + ;; make our kernel and channel visible from the outside + (setf *monitoring-kernel* kernel + *monitoring-channel* (lp:make-channel)) (lp:submit-task *monitoring-channel* #'monitor *monitoring-queue*) (send-event (make-start :start-logger start-logger))