From 77b8bbd6d6c3487e9f0aff717d3ec4c1a1e597b2 Mon Sep 17 00:00:00 2001 From: Hiroki KUMAZAKI Date: Tue, 15 Sep 2026 03:40:48 +0900 Subject: [PATCH] oto: close the ready channel even when Oboe initialization fails Otherwise NewContext callers waiting on the channel block forever when oboe.Play reports an error. --- driver_android.go | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/driver_android.go b/driver_android.go index 846603c..17111e0 100644 --- a/driver_android.go +++ b/driver_android.go @@ -36,14 +36,15 @@ func newContext(sampleRate int, channelCount int, format mux.Format, bufferSizeI mux: mux.New(sampleRate, channelCount, format), } go func() { + // The ready channel must close even if Play fails, or callers waiting on it block forever. + defer close(ready) + c.m.Lock() defer c.m.Unlock() if err := oboe.Play(sampleRate, channelCount, c.mux.ReadFloat32s, c.err.Join, bufferSizeInBytes); err != nil { c.err.Join(err) - return } - close(ready) }() return c, ready, nil }