aboutsummaryrefslogtreecommitdiff
path: root/src/syscall/fs_wasip1.go
diff options
context:
space:
mode:
Diffstat (limited to 'src/syscall/fs_wasip1.go')
-rw-r--r--src/syscall/fs_wasip1.go14
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