TODO: defer workaround, should remove after fix

This commit is contained in:
Li Jie
2025-04-11 17:14:26 +08:00
parent 5a13e7400e
commit 19b98393a6
4 changed files with 10 additions and 4 deletions

View File

@@ -80,7 +80,7 @@ func (p *pipe) write(b []byte) (n int, err error) {
return 0, p.writeCloseError() return 0, p.writeCloseError()
default: default:
p.wrMu.Lock() p.wrMu.Lock()
defer p.wrMu.Unlock() //TODO(lijie): workaround for defer crash on wasm
} }
for once := true; once || len(b) > 0; once = false { for once := true; once || len(b) > 0; once = false {
@@ -90,9 +90,11 @@ func (p *pipe) write(b []byte) (n int, err error) {
b = b[nw:] b = b[nw:]
n += nw n += nw
case <-p.done: case <-p.done:
p.wrMu.Unlock()
return n, p.writeCloseError() return n, p.writeCloseError()
} }
} }
p.wrMu.Unlock()
return n, nil return n, nil
} }

View File

@@ -380,7 +380,7 @@ func (m *Map) CompareAndSwap(key, old, new any) bool {
} }
m.mu.Lock() m.mu.Lock()
defer m.mu.Unlock() //TODO(lijie): workaround for defer crash on wasm
read = m.loadReadOnly() read = m.loadReadOnly()
swapped := false swapped := false
if e, ok := read.m[key]; ok { if e, ok := read.m[key]; ok {
@@ -395,6 +395,7 @@ func (m *Map) CompareAndSwap(key, old, new any) bool {
// more efficient steady state. // more efficient steady state.
m.missLocked() m.missLocked()
} }
m.mu.Unlock()
return swapped return swapped
} }

View File

@@ -163,12 +163,13 @@ func Clearenv() {
func Environ() []string { func Environ() []string {
envOnce.Do(copyenv) envOnce.Do(copyenv)
envLock.RLock() envLock.RLock()
defer envLock.RUnlock() //TODO(lijie): workaround for defer crash on wasm
a := make([]string, 0, len(envs)) a := make([]string, 0, len(envs))
for _, env := range envs { for _, env := range envs {
if env != "" { if env != "" {
a = append(a, env) a = append(a, env)
} }
} }
envLock.RUnlock()
return a return a
} }

View File

@@ -577,7 +577,7 @@ func readFile(name string) ([]byte, error) {
if err != nil { if err != nil {
return nil, err return nil, err
} }
defer closefd(f) //TODO(lijie): workaround for defer crash on wasm
var ( var (
buf [4096]byte buf [4096]byte
ret []byte ret []byte
@@ -592,9 +592,11 @@ func readFile(name string) ([]byte, error) {
break break
} }
if len(ret) > maxFileSize { if len(ret) > maxFileSize {
closefd(f)
return nil, fileSizeError(name) return nil, fileSizeError(name)
} }
} }
closefd(f)
return ret, err return ret, err
} }