liminix

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README | LICENSE

commit eca8e37e7aeae88525230804a711659f6c0b5dc4
parent d300373b96ca5ee5fcf45a20ee1a2f2daea350c5
Author: Daniel Barlow <dan@telent.net>
Date:   Fri, 26 Jul 2024 23:40:40 +0100

anoia.svc use timeout for inotify

in case we miss a message, check the directory every 5s
anyway

Diffstat:
Mpkgs/anoia/svc.fnl | 10++++++++--
1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/pkgs/anoia/svc.fnl b/pkgs/anoia/svc.fnl @@ -1,13 +1,14 @@ (local inotify (require :inotify)) (local { : file-exists? } (require :anoia)) (local { : file-type : dir &as fs } (require :anoia.fs)) +(local ll (require :lualinux)) (fn read-line [name] (with-open [f (assert (io.open name :r) (.. "can't open file " name))] (f:read "*l"))) (fn watch-fsevents [directory-name] - (let [handle (inotify.init)] + (let [handle (inotify.init { :blocking false})] (handle:addwatch directory-name inotify.IN_CREATE inotify.IN_MOVE @@ -39,11 +40,16 @@ (coroutine.yield self) (self:wait)))) +(fn read-with-timeout [watcher] + (let [fd (watcher:fileno)] + (ll.pollin fd 5000) + (watcher:read))) + (fn open [directory] (let [watcher (watch-fsevents directory) has-file? (fn [filename] (file-exists? (.. directory "/" filename)))] { - :wait #(watcher:read) + :wait #(read-with-timeout watcher) :ready? (fn [self] (and (has-file? "state") (not (has-file? ".lock")))) :output (fn [_ filename]