: do-sleep ( -- quot )
sleep-queue* dup sleep-time dup 0 =
- [ drop pop ] [ io-multiplex next-thread ] ifte ;
+ [ drop pop ] [ nip io-multiplex next-thread ] ifte ;
: next-thread ( -- quot )
run-queue dup queue-empty? [ drop do-sleep ] [ deque ] ifte ;
END-STRUCT
: make-timeval ( ms -- timeval )
- 1000 /mod 1000 *
- <timeval>
- [ set-timeval-usec ] keep
- [ set-timeval-sec ] keep ;
+ dup -1 = [
+ drop NULL
+ ] [
+ 1000 /mod 1000 *
+ <timeval>
+ [ set-timeval-usec ] keep
+ [ set-timeval-sec ] keep
+ ] ifte ;
FUNCTION: int select ( int nfds, void* readfds, void* writefds, void* exceptfds, timeval* timeout ) ;