summaryrefslogtreecommitdiff
path: root/lisp
diff options
context:
space:
mode:
authorCarlos Konstanski <carlos.konstanski@olo.com>2025-12-01 12:15:40 -0700
committerGitHub <noreply@github.com>2025-12-01 12:15:40 -0700
commite7268f15f90251933edb07df2366bc40e1bc1fb5 (patch)
tree75de12eb5246850374432c3ee8972261768aeddc /lisp
parent563e47e483e54f0ecd96eaef283c44505799d325 (diff)
parentcef02cf775e530ff3402b2a8d28c6e8d97c32c70 (diff)
Merge pull request #10 from ololabs/inf-18346-impove-error-handling-to-prevent-thread-death
[INF-18346] Improve error handling to prevent thread death
Diffstat (limited to 'lisp')
-rw-r--r--lisp/condition/condition.lisp7
-rw-r--r--lisp/queue/queue.lisp44
-rw-r--r--lisp/snow.asd7
3 files changed, 28 insertions, 30 deletions
diff --git a/lisp/condition/condition.lisp b/lisp/condition/condition.lisp
deleted file mode 100644
index d0bad15..0000000
--- a/lisp/condition/condition.lisp
+++ /dev/null
@@ -1,7 +0,0 @@
-;;; -*- Mode: Lisp; Syntax: ANSI-Common-Lisp; Base: 10 -*-
-(declaim (optimize (speed 0) (safety 3) (debug 3)))
-
-(in-package :snow)
-
-(define-condition handled-error (error)
- ((text :initarg :text :reader text)))
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))))
diff --git a/lisp/snow.asd b/lisp/snow.asd
index 741a1d0..b8624c3 100644
--- a/lisp/snow.asd
+++ b/lisp/snow.asd
@@ -18,7 +18,7 @@
:components ,components))
(defparameter *quicklisp-packages* '(net-telent-date simple-date local-time cl-ppcre uffi hunchentoot cl-log ironclad))
-(defparameter *asdf-packages* '(org-ckons-core org-ckons-condition org-ckons-http org-ckons-json org-ckons-file org-ckons-session))
+(defparameter *asdf-packages* '(org-ckons-core org-ckons-http org-ckons-json org-ckons-file org-ckons-session))
(defparameter *all-packages* (append *quicklisp-packages* *asdf-packages*))
(loop for pkg in *quicklisp-packages* do
@@ -33,11 +33,8 @@
:depends-on *all-packages*
:components ((:module core
:components ((:file "core")))
- (:module condition
- :depends-on (core)
- :components ((:file "condition")))
(:module queue
- :depends-on (condition)
+ :depends-on (core)
:components ((:file "fifo")
(:file "queue" :depends-on ("fifo"))))
(:module git