Fix Unix io.launcher

db4
Doug Coleman 2008-01-24 22:41:55 -06:00
parent b5a337bb2a
commit 0b4be5f0a2
3 changed files with 9 additions and 8 deletions

View File

@ -2,8 +2,8 @@
! See http://factorcode.org/license.txt for BSD license. ! See http://factorcode.org/license.txt for BSD license.
IN: io.unix.bsd IN: io.unix.bsd
USING: io.backend io.unix.backend io.unix.kqueue io.unix.select USING: io.backend io.unix.backend io.unix.kqueue io.unix.select
io.unix.launcher namespaces kernel assocs threads continuations io.launcher io.unix.launcher namespaces kernel assocs threads
; continuations ;
! On *BSD and Mac OS X, we use select() for the top-level ! On *BSD and Mac OS X, we use select() for the top-level
! multiplexer, and we hang a kqueue off of it but file change ! multiplexer, and we hang a kqueue off of it but file change

View File

@ -2,7 +2,7 @@
! See http://factorcode.org/license.txt for BSD license. ! See http://factorcode.org/license.txt for BSD license.
USING: alien.c-types kernel io.nonblocking io.unix.backend USING: alien.c-types kernel io.nonblocking io.unix.backend
sequences assocs unix unix.kqueue unix.process math namespaces sequences assocs unix unix.kqueue unix.process math namespaces
combinators threads vectors ; combinators threads vectors io.launcher io.unix.launcher ;
IN: io.unix.kqueue IN: io.unix.kqueue
TUPLE: kqueue-mx events ; TUPLE: kqueue-mx events ;
@ -50,15 +50,15 @@ M: kqueue-mx unregister-io-task ( task mx -- )
: kevent-write-task ( mx fd -- ) : kevent-write-task ( mx fd -- )
over mx-reads at handle-io-task ; over mx-reads at handle-io-task ;
: kevent-proc-task ( mx pid -- ) : kevent-proc-task ( pid -- )
dup (wait-for-pid) swap find-process dup wait-for-pid swap find-process
dup [ notify-exit ] [ 2drop ] if ; dup [ notify-exit ] [ 2drop ] if ;
: handle-kevent ( mx kevent -- ) : handle-kevent ( mx kevent -- )
dup kevent-ident swap kevent-filter { dup kevent-ident swap kevent-filter {
{ [ dup EVFILT_READ = ] [ drop kevent-read-task ] } { [ dup EVFILT_READ = ] [ drop kevent-read-task ] }
{ [ dup EVFILT_WRITE = ] [ drop kevent-write-task ] } { [ dup EVFILT_WRITE = ] [ drop kevent-write-task ] }
{ [ dup EVFILT_PROC = ] [ drop kevent-proc-task ] } { [ dup EVFILT_PROC = ] [ drop kevent-proc-task drop ] }
} cond ; } cond ;
: handle-kevents ( mx n -- ) : handle-kevents ( mx n -- )

View File

@ -3,7 +3,7 @@
USING: io io.backend io.launcher io.unix.backend io.nonblocking USING: io io.backend io.launcher io.unix.backend io.nonblocking
sequences kernel namespaces math system alien.c-types debugger sequences kernel namespaces math system alien.c-types debugger
continuations arrays assocs combinators unix.process continuations arrays assocs combinators unix.process
parser-combinators memoize promises strings ; parser-combinators memoize promises strings threads ;
IN: io.unix.launcher IN: io.unix.launcher
! Search unix first ! Search unix first
@ -78,7 +78,8 @@ M: unix-io process-stream*
] with-descriptor ; ] with-descriptor ;
: find-process ( handle -- process ) : find-process ( handle -- process )
f process construct-boa processes get at ; processes get swap [ nip swap process-handle = ] curry
assoc-find 2drop ;
! Inefficient process wait polling, used on Linux and Solaris. ! Inefficient process wait polling, used on Linux and Solaris.
! On BSD and Mac OS X, we use kqueue() which scales better. ! On BSD and Mac OS X, we use kqueue() which scales better.