IN: io-internals
-: io-multiplex ( timeout -- task )
+: io-multiplex ( timeout -- )
#! FIXME: needs to work given a timeout
- -1 = [ win32-next-io-task ] when ;
+ dup -1 = [ drop INFINITE ] when cancel-timedout wait-for-io swap call ;
: init-io ( -- )
win32-init-stdio ;
(wait-for-io) overlapped>callback swap indirect-pointer-value
rot [ queue-error ] unless ;
-: win32-next-io-task ( -- )
- INFINITE wait-for-io swap call ;
-
-: win32-io-thread ( -- )
- cancel-timedout 10 wait-for-io swap [
- [ schedule-thread call ] callcc0 2drop
- ] [
- drop yield
- ] ifte*
- win32-io-thread ;
-
: win32-init-stdio ( -- )
INVALID_HANDLE_VALUE NULL NULL 1 CreateIoCompletionPort
completion-port set
- <io-queue> io-queue set
- [ win32-io-thread ] in-thread ;
+ <io-queue> io-queue set ;