diff options
| author | ckonstanski <carlos.konstanski@olo.com> | 2025-12-01 12:12:04 -0700 |
|---|---|---|
| committer | ckonstanski <carlos.konstanski@olo.com> | 2025-12-01 12:12:04 -0700 |
| commit | cef02cf775e530ff3402b2a8d28c6e8d97c32c70 (patch) | |
| tree | 75de12eb5246850374432c3ee8972261768aeddc /lisp/queue/queue.lisp | |
| parent | 563e47e483e54f0ecd96eaef283c44505799d325 (diff) | |
[INF-18346] Impove error handling to prevent thread death
Diffstat (limited to 'lisp/queue/queue.lisp')
| -rw-r--r-- | lisp/queue/queue.lisp | 44 |
1 files changed, 26 insertions, 18 deletions
diff --git a/lisp/queue/queue.lisp b/lisp/queue/queue.lisp index da86f6c..ecd517f 100644 --- a/lisp/queue/queue.lisp +++ b/lisp/queue/queue.lisp @@ -62,26 +62,34 @@ names. The string is a SHA1 hash." (process-thread-function symbol-queue-name process-thread-name sleep-interval))))) (defun process-thread-function (symbol-queue-name process-thread-name sleep-interval) - (with-error-handled-thread (process-thread-name :warning) + (without-error-handled-thread (process-thread-name :warning) (labels ((do-dequeue () (dequeue (eval symbol-queue-name))) (do-process (object) (bg-perform object)) (do-sleep () - (sleep sleep-interval))) - (loop - (let (object - do-process-p - do-sleep-p) - (sb-thread:with-mutex (*queue-mutex*) - (cond ((empty-p (eval symbol-queue-name)) - (setf do-sleep-p t)) - (t - (setf object (do-dequeue)) - (if object - (setf do-process-p t) - (setf do-sleep-p t))))) - (when do-sleep-p - (do-sleep)) - (when (and do-process-p object) - (do-process object))))))) + (sleep sleep-interval)) + (do-loop () + (handler-case + (loop + (let (object + do-process-p + do-sleep-p) + (sb-thread:with-mutex (*queue-mutex*) + (cond ((empty-p (eval symbol-queue-name)) + (setf do-sleep-p t)) + (t + (setf object (do-dequeue)) + (if object + (setf do-process-p t) + (setf do-sleep-p t))))) + (when do-sleep-p + (do-sleep)) + (when (and do-process-p object) + (do-process object)))) + (error (e) + (org-ckons-core::logger e) + (unless hunchentoot:*catch-errors-p* + (invoke-debugger e)) + (do-loop))))) + (do-loop)))) |
