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:
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]