Try to fix inotify again

db4
Slava Pestov 2008-03-31 16:20:09 -05:00
parent 8f0530daa6
commit c2fdd797bc
1 changed files with 13 additions and 12 deletions

View File

@ -3,8 +3,8 @@
USING: kernel io.backend io.monitors io.monitors.private USING: kernel io.backend io.monitors io.monitors.private
io.files io.buffers io.nonblocking io.timeouts io.unix.backend io.files io.buffers io.nonblocking io.timeouts io.unix.backend
io.unix.select io.unix.launcher unix.linux.inotify assocs io.unix.select io.unix.launcher unix.linux.inotify assocs
namespaces threads continuations init math namespaces threads continuations init math alien.c-types alien
alien.c-types alien vocabs.loader ; vocabs.loader accessors ;
IN: io.unix.linux IN: io.unix.linux
TUPLE: linux-io ; TUPLE: linux-io ;
@ -18,18 +18,16 @@ TUPLE: linux-monitor ;
TUPLE: inotify watches ; TUPLE: inotify watches ;
: watches ( -- assoc ) inotify get-global inotify-watches ; : watches ( -- assoc ) inotify get-global watches>> ;
: wd>monitor ( wd -- monitor ) watches at ; : wd>monitor ( wd -- monitor ) watches at ;
: <inotify> ( -- port/f ) : <inotify> ( -- port/f )
H{ } clone H{ } clone
inotify_init dup 0 < [ 2drop f ] [ inotify_init [ io-error ] [ inotify <buffered-port> ] bi
inotify <buffered-port> { set-inotify-watches set-delegate } inotify construct ;
{ set-inotify-watches set-delegate } inotify construct
] if ;
: inotify-fd inotify get-global port-handle ; : inotify-fd inotify get-global handle>> ;
: (add-watch) ( path mask -- wd ) : (add-watch) ( path mask -- wd )
inotify-fd -rot inotify_add_watch dup io-error ; inotify-fd -rot inotify_add_watch dup io-error ;
@ -80,10 +78,10 @@ M: linux-monitor dispose ( monitor -- )
parse-action swap alien>char-string ; parse-action swap alien>char-string ;
: events-exhausted? ( i buffer -- ? ) : events-exhausted? ( i buffer -- ? )
buffer-fill >= ; fill>> >= ;
: inotify-event@ ( i buffer -- alien ) : inotify-event@ ( i buffer -- alien )
buffer-ptr <displaced-alien> ; ptr>> <displaced-alien> ;
: next-event ( i buffer -- i buffer ) : next-event ( i buffer -- i buffer )
2dup inotify-event@ 2dup inotify-event@
@ -111,14 +109,17 @@ TUPLE: inotify-task ;
f inotify-task <input-task> ; f inotify-task <input-task> ;
: init-inotify ( mx -- ) : init-inotify ( mx -- )
<inotify> dup inotify set-global <inotify>
dup inotify set-global
<inotify-task> swap register-io-task ; <inotify-task> swap register-io-task ;
M: inotify-task do-io-task ( task -- ) M: inotify-task do-io-task ( task -- )
io-task-port read-notifications f ; io-task-port read-notifications f ;
M: linux-io init-io ( -- ) M: linux-io init-io ( -- )
<select-mx> dup mx set-global init-inotify ; <select-mx>
[ mx set-global ]
[ [ init-inotify ] ignore-errors ] bi ;
T{ linux-io } set-io-backend T{ linux-io } set-io-backend