iens

Manager of links to read
git clone https://git.instinctive.eu/iens.git
Log | Files | Refs | README | LICENSE

commit 2b855eb6e491746c61dc559d992b31e91c45e7ef
parent 5a5681481ac18438262cdbae498a03d2f11f4698
Author: Natasha Kerensikova <natgh@instinctive.eu>
Date:   Thu, 24 Sep 2026 17:44:50 +0000

SRFI-19 monotonic time for more precise get-gruik pauses
Diffstat:
Msrc/get-gruiks.scm | 28++++++++++++++--------------
1 file changed, 14 insertions(+), 14 deletions(-)

diff --git a/src/get-gruiks.scm b/src/get-gruiks.scm @@ -28,6 +28,7 @@ nanosleep rss sql-de-lite + srfi-19-time uri-common) ;;;;;;;;;;;;;;;;;;;;;;;;;;;; @@ -65,9 +66,8 @@ (define (deadline-sleep deadline count) (when deadline - (let ((rest (- deadline (current-seconds)))) - (when (positive? rest) - (secosleep (if (positive? count) (/ rest count) rest)))))) + (let ((rest (time->seconds (time-difference deadline (monotonic-time))))) + (secosleep (/ rest count))))) (define (process-gruik source url title comm) (when (= 0 (exec (sql db "UPDATE gruik @@ -237,19 +237,21 @@ ;;;;;;;;;;;;;;; ;; Actual Run -(define (add-period prev-deadline) - (+ (max prev-deadline (current-seconds)) - (/ total-period - (query fetch-value (sql db "SELECT count(*) FROM source_rss;"))))) +(define (source-deadline) + (add-duration + (monotonic-time) + (seconds->time + (/ total-period + (query fetch-value (sql db "SELECT count(*) FROM source_rss;")))))) (define usr1-queue (make-signal-handler signal/usr1)) (if total-period (let loop ((index (query fetch-value (sql/transient db - "SELECT min(id) FROM source_rss;"))) - (deadline (add-period 0))) - (let ((arg (query fetch-row + "SELECT min(id) FROM source_rss;")))) + (let ((deadline (source-deadline)) + (arg (query fetch-row (sql db "SELECT COALESCE((SELECT min(id) FROM source_rss WHERE id > ?1), @@ -258,11 +260,9 @@ FROM source_rss WHERE id = ?1;") index))) (apply process-source (cons deadline (cdr arg))) - (let ((rest (- deadline (current-seconds)))) - (when (positive? rest) - (secosleep rest))) + (deadline-sleep deadline 1) (unless (and (<= (car arg) index) (usr1-queue)) - (loop (car arg) (add-period deadline))))) + (loop (car arg))))) (query (for-each-row* process-source) (sql db "SELECT NULL,name,url,format,last_modified,etag