From 0e00d7e5a6952656d3109484b9deee00d9753ae6 Mon Sep 17 00:00:00 2001 From: Hugo Thunnissen Date: Mon, 3 Jul 2023 09:10:18 +0200 Subject: [PATCH] Wakeup worker when stop is requested and worker thread is paused This makes the worker thread stop execution immediately after the stop is requested in stead of after the next wakeup. --- phpinspect-worker.el | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/phpinspect-worker.el b/phpinspect-worker.el index e57776e..dae9edc 100644 --- a/phpinspect-worker.el +++ b/phpinspect-worker.el @@ -197,11 +197,14 @@ on the worker independent of dynamic variables during testing.") (cl-defgeneric phpinspect-worker-make-wakeup-function (worker) "Create a function that can be used to wake up WORKER's thread.") +(cl-defmethod phpinspect-worker-wakeup ((worker phpinspect-worker)) + (when (eq main-thread (thread--blocker (phpinspect-worker-thread worker))) + (thread-signal (phpinspect-worker-thread worker) + 'phpinspect-wakeup-thread nil))) + (cl-defmethod phpinspect-worker-make-wakeup-function ((worker phpinspect-worker)) (lambda () - (when (eq main-thread (thread--blocker (phpinspect-worker-thread worker))) - (thread-signal (phpinspect-worker-thread worker) - 'phpinspect-wakeup-thread nil)))) + (phpinspect-worker-wakeup worker))) (cl-defmethod phpinspect-worker-make-wakeup-function ((worker phpinspect-dynamic-worker)) (phpinspect-worker-make-wakeup-function (phpinspect-resolve-dynamic-worker worker))) @@ -303,7 +306,8 @@ CONTINUE must be a condition-variable" "Stop the worker") (cl-defmethod phpinspect-worker-stop ((worker phpinspect-worker)) - (setf (phpinspect-worker-continue-running worker) nil)) + (setf (phpinspect-worker-continue-running worker) nil) + (phpinspect-worker-wakeup worker)) (cl-defmethod phpinspect-worker-stop ((worker phpinspect-dynamic-worker)) (phpinspect-worker-stop (phpinspect-resolve-dynamic-worker worker)))