From 37159d31bd1f1765b0978b104f58056d00a9713c Mon Sep 17 00:00:00 2001 From: realrasengan Date: Mon, 30 Mar 2026 16:19:17 -0700 Subject: [PATCH] WASM: use persistent writer, fix connection lost from lock churn --- cmd/mosh-wasm/webtransport.go | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/cmd/mosh-wasm/webtransport.go b/cmd/mosh-wasm/webtransport.go index 51fc7c2..f4d508e 100644 --- a/cmd/mosh-wasm/webtransport.go +++ b/cmd/mosh-wasm/webtransport.go @@ -12,6 +12,7 @@ import ( // wtConn wraps a browser WebTransport connection as a mosh.Conn. type wtConn struct { transport js.Value + writer js.Value // persistent writable stream writer incoming chan []byte done chan struct{} once sync.Once @@ -56,8 +57,11 @@ func dialWebTransport(url string) (*wtConn, error) { onReady.Release() onFail.Release() + writer := wt.Get("datagrams").Get("writable").Call("getWriter") + c := &wtConn{ transport: wt, + writer: writer, incoming: make(chan []byte, 256), done: make(chan struct{}), } @@ -132,11 +136,9 @@ func (c *wtConn) Read(b []byte) (int, error) { } func (c *wtConn) Write(b []byte) (int, error) { - writer := c.transport.Get("datagrams").Get("writable").Call("getWriter") arr := js.Global().Get("Uint8Array").New(len(b)) js.CopyBytesToJS(arr, b) - writer.Call("write", arr) - writer.Call("releaseLock") + c.writer.Call("write", arr) return len(b), nil }