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

View File

@ -3,7 +3,7 @@
USING: io io.backend io.launcher io.unix.backend io.nonblocking
sequences kernel namespaces math system alien.c-types debugger
continuations arrays assocs combinators unix.process
parser-combinators memoize promises strings ;
parser-combinators memoize promises strings threads ;
IN: io.unix.launcher
! Search unix first
@ -78,7 +78,8 @@ M: unix-io process-stream*
] with-descriptor ;
: 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.
! On BSD and Mac OS X, we use kqueue() which scales better.