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()
default:
p.wrMu.Lock()
defer p.wrMu.Unlock()
//TODO(lijie): workaround for defer crash on wasm
}
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:]
n += nw
case <-p.done:
p.wrMu.Unlock()
return n, p.writeCloseError()
}
}
p.wrMu.Unlock()
return n, nil
}

View File

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

View File

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

View File

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