summaryrefslogtreecommitdiff
path: root/lisp/queue/queue.lisp
diff options
context:
space:
mode:
authorckonstanski <carlos.konstanski@olo.com>2025-12-01 12:12:04 -0700
committerckonstanski <carlos.konstanski@olo.com>2025-12-01 12:12:04 -0700
commitcef02cf775e530ff3402b2a8d28c6e8d97c32c70 (patch)
tree75de12eb5246850374432c3ee8972261768aeddc /lisp/queue/queue.lisp
parent563e47e483e54f0ecd96eaef283c44505799d325 (diff)
[INF-18346] Impove error handling to prevent thread death
Diffstat (limited to 'lisp/queue/queue.lisp')
-rw-r--r--lisp/queue/queue.lisp44
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))))