X-Git-Url: https://code.consxy.com/gitweb/gitweb.cgi?p=candle;a=blobdiff_plain;f=src%2Fmain%2Fserver.lisp;h=ffd6e82ce1749f66093a62a210bce636b68f7ab5;hp=19780e24bed72a0baa095cafef23ef02da654b14;hb=92a8cc8928e1f5d6aa13708b35cb4551aa736a37;hpb=f0e0d6e5babe32e9c84f0ed224693fe0cfd83d9e diff --git a/src/main/server.lisp b/src/main/server.lisp index 19780e2..ffd6e82 100644 --- a/src/main/server.lisp +++ b/src/main/server.lisp @@ -2,22 +2,48 @@ (defun server (port &optional (background t)) (when (not *candle-dir*) (error "Need a candle dir")) - (let + (let* ((data-dir (format nil "~Adata" *candle-dir*))) (ensure-directories-exist *candle-dir*) (ensure-directories-exist data-dir) (lame-db:load-known-dbs data-dir) - (sb-thread:make-thread - (lambda () - (do () (nil) - (progn - (sleep (* 5 60)) - (lame-db:save-known-dbs data-dir)))) - :name "Save Thread") (format t "Starting processor in ~(~A~) mode~%" *job-system*) + (start-save-thread data-dir) (start-processor-thread) (communication:start-listener port background))) +(defun start-save-thread (data-dir) + (format t "Starting Save Thread~%") + (let* + ((mutex (sb-thread:make-mutex)) + (waitq (sb-thread:make-waitqueue)) + (active t) + (save-thread + (sb-thread:make-thread + (lambda () + (loop + :while active + :do + (sb-thread:with-mutex (mutex) + (sb-thread:condition-wait waitq mutex))) + (lame-db:save-known-dbs data-dir)) + :name "Save Thread"))) + (sb-thread:make-thread + (lambda () + (loop + (sleep (* 1 60)) + (sb-thread:with-mutex (mutex) + (sb-thread:condition-broadcast waitq)))) + :name "Save Thread Trigger") + (push + (lambda () + (format t "Shutting down save thread~%") + (sb-thread:with-mutex (mutex) + (setf active nil) + (sb-thread:condition-broadcast waitq)) + (sb-thread:join-thread save-thread)) + sb-ext:*exit-hooks*))) + (defun add-project (name src) (when (not (cl-ppcre:scan "^[0-9A-Za-z-]*$" name))