diff options
Diffstat (limited to 'src/syscall/fs_wasip1.go')
-rw-r--r-- | src/syscall/fs_wasip1.go | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/src/syscall/fs_wasip1.go b/src/syscall/fs_wasip1.go index d60ab0b53e..4ad3f9610b 100644 --- a/src/syscall/fs_wasip1.go +++ b/src/syscall/fs_wasip1.go @@ -11,6 +11,20 @@ import ( "unsafe" ) +func init() { + // Try to set stdio to non-blocking mode before the os package + // calls NewFile for each fd. NewFile queries the non-blocking flag + // but doesn't change it, even if the runtime supports non-blocking + // stdio. Since WebAssembly modules are single-threaded, blocking + // system calls temporarily halt execution of the module. If the + // runtime supports non-blocking stdio, the Go runtime is able to + // use the WASI net poller to poll for read/write readiness and is + // able to schedule goroutines while waiting. + SetNonblock(0, true) + SetNonblock(1, true) + SetNonblock(2, true) +} + type uintptr32 = uint32 type size = uint32 type fdflags = uint32 |