From 9fc2ae158cf3fa1cea73d09a415c07a12a0b73e7 Mon Sep 17 00:00:00 2001 From: Hajime Hoshi Date: Sun, 28 Apr 2019 02:21:56 +0900 Subject: [PATCH] audio: Bug fix: Close always returned error --- audio/audio.go | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/audio/audio.go b/audio/audio.go index 93fe11feb..63b27322e 100644 --- a/audio/audio.go +++ b/audio/audio.go @@ -341,6 +341,15 @@ func (p *Player) Close() error { func (p *playerImpl) Close() error { p.mux.removePlayer(p) + + p.m.Lock() + c := p.closedExplicitly + p.m.Unlock() + if c { + p.m.Unlock() + return fmt.Errorf("audio: the player is already closed") + } + p.m.Lock() p.closedExplicitly = true p.m.Unlock() @@ -365,9 +374,13 @@ func (p *playerImpl) ensureReadLoop() error { } func (p *playerImpl) closeImpl() error { - if err := p.ensureReadLoop(); err != nil { - return err + p.m.Lock() + r := p.runningReadLoop + p.m.Unlock() + if !r { + return nil } + p.closeCh <- struct{}{} <-p.closedCh return nil