fix stack effects for nanosseconds, update io backends for nanos
parent
987602235e
commit
adcb0df0c4
|
@ -51,8 +51,8 @@ M: epoll-mx remove-output-callbacks ( fd mx -- seq )
|
||||||
[ EPOLLOUT do-epoll-del ] [ call-next-method ] 2bi
|
[ EPOLLOUT do-epoll-del ] [ call-next-method ] 2bi
|
||||||
] [ 2drop f ] if ;
|
] [ 2drop f ] if ;
|
||||||
|
|
||||||
: wait-event ( mx us -- n )
|
: wait-event ( mx nanos -- n )
|
||||||
[ [ fd>> ] [ events>> ] bi dup length ] [ 1000 /i ] bi*
|
[ [ fd>> ] [ events>> ] bi dup length ] [ 1000000 /i ] bi*
|
||||||
epoll_wait multiplexer-error ;
|
epoll_wait multiplexer-error ;
|
||||||
|
|
||||||
: handle-event ( event mx -- )
|
: handle-event ( event mx -- )
|
||||||
|
@ -63,5 +63,5 @@ M: epoll-mx remove-output-callbacks ( fd mx -- seq )
|
||||||
: handle-events ( mx n -- )
|
: handle-events ( mx n -- )
|
||||||
[ dup events>> ] dip head-slice swap '[ _ handle-event ] each ;
|
[ dup events>> ] dip head-slice swap '[ _ handle-event ] each ;
|
||||||
|
|
||||||
M: epoll-mx wait-for-events ( us mx -- )
|
M: epoll-mx wait-for-events ( nanos mx -- )
|
||||||
swap 60000000 or dupd wait-event handle-events ;
|
swap 60000000 or dupd wait-event handle-events ;
|
||||||
|
|
|
@ -73,6 +73,6 @@ M: kqueue-mx remove-output-callbacks ( fd mx -- seq )
|
||||||
[ dup events>> ] dip head-slice
|
[ dup events>> ] dip head-slice
|
||||||
[ handle-kevent ] with each ;
|
[ handle-kevent ] with each ;
|
||||||
|
|
||||||
M: kqueue-mx wait-for-events ( us mx -- )
|
M: kqueue-mx wait-for-events ( nanos mx -- )
|
||||||
swap dup [ make-timespec ] when
|
swap dup [ make-timespec ] when
|
||||||
dupd wait-kevent handle-kevents ;
|
dupd wait-kevent handle-kevents ;
|
||||||
|
|
|
@ -26,7 +26,7 @@ GENERIC: remove-output-callbacks ( fd mx -- callbacks )
|
||||||
|
|
||||||
M: mx remove-output-callbacks writes>> delete-at* drop ;
|
M: mx remove-output-callbacks writes>> delete-at* drop ;
|
||||||
|
|
||||||
GENERIC: wait-for-events ( ms mx -- )
|
GENERIC: wait-for-events ( nanos mx -- )
|
||||||
|
|
||||||
: input-available ( fd mx -- )
|
: input-available ( fd mx -- )
|
||||||
reads>> delete-at* drop [ resume ] each ;
|
reads>> delete-at* drop [ resume ] each ;
|
||||||
|
|
|
@ -48,9 +48,9 @@ TUPLE: select-mx < mx read-fdset write-fdset ;
|
||||||
[ write-fdset/tasks [ init-fdset ] keep ] tri
|
[ write-fdset/tasks [ init-fdset ] keep ] tri
|
||||||
f ;
|
f ;
|
||||||
|
|
||||||
M:: select-mx wait-for-events ( us mx -- )
|
M:: select-mx wait-for-events ( nanos mx -- )
|
||||||
mx
|
mx
|
||||||
[ init-fdsets us dup [ make-timeval ] when select multiplexer-error drop ]
|
[ init-fdsets nanos 1000 /i dup [ make-timeval ] when select multiplexer-error drop ]
|
||||||
[ [ read-fdset/tasks ] keep [ input-available ] check-fdset ]
|
[ [ read-fdset/tasks ] keep [ input-available ] check-fdset ]
|
||||||
[ [ write-fdset/tasks ] keep [ output-available ] check-fdset ]
|
[ [ write-fdset/tasks ] keep [ output-available ] check-fdset ]
|
||||||
tri ;
|
tri ;
|
||||||
|
|
|
@ -113,8 +113,8 @@ HELP: sleep-queue
|
||||||
{ $var-description "A " { $link min-heap } " storing the queue of sleeping threads." } ;
|
{ $var-description "A " { $link min-heap } " storing the queue of sleeping threads." } ;
|
||||||
|
|
||||||
HELP: sleep-time
|
HELP: sleep-time
|
||||||
{ $values { "us/f" "a non-negative integer or " { $link f } } }
|
{ $values { "nanos/f" "a non-negative integer or " { $link f } } }
|
||||||
{ $description "Outputs the time until the next sleeping thread is scheduled to wake up, which could be zero if there are threads in the run queue, or threads which need to wake up right now. If there are no runnable or sleeping threads, outputs " { $link f } "." } ;
|
{ $description "Returns the time until the next sleeping thread is scheduled to wake up, which could be zero if there are threads in the run queue, or threads which need to wake up right now. If there are no runnable or sleeping threads, returns " { $link f } "." } ;
|
||||||
|
|
||||||
HELP: stop
|
HELP: stop
|
||||||
{ $description "Stops the current thread. The thread may be started again from another thread using " { $link (spawn) } "." } ;
|
{ $description "Stops the current thread. The thread may be started again from another thread using " { $link (spawn) } "." } ;
|
||||||
|
|
|
@ -91,7 +91,7 @@ PRIVATE>
|
||||||
f >>state
|
f >>state
|
||||||
check-registered 2array run-queue push-front ;
|
check-registered 2array run-queue push-front ;
|
||||||
|
|
||||||
: sleep-time ( -- us/f )
|
: sleep-time ( -- nanos/f )
|
||||||
{
|
{
|
||||||
{ [ run-queue deque-empty? not ] [ 0 ] }
|
{ [ run-queue deque-empty? not ] [ 0 ] }
|
||||||
{ [ sleep-queue heap-empty? ] [ f ] }
|
{ [ sleep-queue heap-empty? ] [ f ] }
|
||||||
|
@ -184,8 +184,7 @@ M: f sleep-until
|
||||||
GENERIC: sleep ( dt -- )
|
GENERIC: sleep ( dt -- )
|
||||||
|
|
||||||
M: real sleep
|
M: real sleep
|
||||||
>integer 1000 *
|
>integer nano-count + sleep-until ;
|
||||||
nano-count + sleep-until ;
|
|
||||||
|
|
||||||
: interrupt ( thread -- )
|
: interrupt ( thread -- )
|
||||||
dup state>> [
|
dup state>> [
|
||||||
|
|
|
@ -18,8 +18,8 @@ STRUCT: timespec
|
||||||
swap >>usec
|
swap >>usec
|
||||||
swap >>sec ;
|
swap >>sec ;
|
||||||
|
|
||||||
: make-timespec ( us -- timespec )
|
: make-timespec ( nanos -- timespec )
|
||||||
1000000 /mod 1000 *
|
1000000000 /mod
|
||||||
timespec <struct>
|
timespec <struct>
|
||||||
swap >>nsec
|
swap >>nsec
|
||||||
swap >>sec ;
|
swap >>sec ;
|
||||||
|
|
|
@ -495,7 +495,7 @@ tuple
|
||||||
{ "<tuple>" "classes.tuple.private" (( layout -- tuple )) }
|
{ "<tuple>" "classes.tuple.private" (( layout -- tuple )) }
|
||||||
{ "profiling" "tools.profiler.private" (( ? -- )) }
|
{ "profiling" "tools.profiler.private" (( ? -- )) }
|
||||||
{ "become" "kernel.private" (( old new -- )) }
|
{ "become" "kernel.private" (( old new -- )) }
|
||||||
{ "(sleep)" "threads.private" (( us -- )) }
|
{ "(sleep)" "threads.private" (( nanos -- )) }
|
||||||
{ "<tuple-boa>" "classes.tuple.private" (( ... layout -- tuple )) }
|
{ "<tuple-boa>" "classes.tuple.private" (( ... layout -- tuple )) }
|
||||||
{ "callstack>array" "kernel" (( callstack -- array )) }
|
{ "callstack>array" "kernel" (( callstack -- array )) }
|
||||||
{ "innermost-frame-executing" "kernel.private" (( callstack -- obj )) }
|
{ "innermost-frame-executing" "kernel.private" (( callstack -- obj )) }
|
||||||
|
|
Loading…
Reference in New Issue