From c742ae60bd79e382ed42257b10f4ad21848680b2 Mon Sep 17 00:00:00 2001 From: Hajime Hoshi Date: Sat, 16 Jan 2021 01:01:19 +0900 Subject: [PATCH] audio: Bug fix: Implement renaderPlayer.IsPlayer correctly --- audio/audio.go | 1 - audio/internal/go2cpp/player_js.go | 13 +++++++++++-- audio/readerplayer.go | 10 ++-------- 3 files changed, 13 insertions(+), 11 deletions(-) diff --git a/audio/audio.go b/audio/audio.go index 26ca92395..54e8f5fc3 100644 --- a/audio/audio.go +++ b/audio/audio.go @@ -321,7 +321,6 @@ func (p *Player) finalize() { // // Close returns error when the player is already closed. func (p *Player) Close() error { - runtime.SetFinalizer(p, nil) return p.p.Close() } diff --git a/audio/internal/go2cpp/player_js.go b/audio/internal/go2cpp/player_js.go index fce874baf..2bcbe29e3 100644 --- a/audio/internal/go2cpp/player_js.go +++ b/audio/internal/go2cpp/player_js.go @@ -107,6 +107,13 @@ func (p *Player) Play() { p.cond.Signal() } +func (p *Player) IsPlaying() bool { + p.cond.L.Lock() + defer p.cond.L.Unlock() + + return p.state == playerStatePlaying +} + func (p *Player) Reset() { p.cond.L.Lock() defer p.cond.L.Unlock() @@ -151,8 +158,10 @@ func (p *Player) close(remove bool) error { return p.err } - p.v.Call("close", false) - p.v = js.Undefined() + if p.v.Truthy() { + p.v.Call("close", false) + p.v = js.Undefined() + } if remove { p.state = playerStateClosed p.onWritten.Release() diff --git a/audio/readerplayer.go b/audio/readerplayer.go index 1010e20c9..ddb66998d 100644 --- a/audio/readerplayer.go +++ b/audio/readerplayer.go @@ -16,7 +16,6 @@ package audio import ( "io" - "runtime" "sync" "time" ) @@ -30,6 +29,7 @@ type readerDriver interface { type readerDriverPlayer interface { Pause() Play() + IsPlaying() bool Reset() Volume() float64 SetVolume(volume float64) @@ -51,7 +51,6 @@ type readerPlayer struct { context *Context player readerDriverPlayer src *timeStream - playing bool m sync.Mutex } @@ -66,7 +65,6 @@ func (c *readerPlayerFactory) newPlayerImpl(context *Context, src io.Reader) (pl player: c.driver.NewPlayer(src), src: s, } - runtime.SetFinalizer(p, (*readerPlayer).Close) return p, nil } @@ -75,7 +73,6 @@ func (p *readerPlayer) Play() { defer p.m.Unlock() p.player.Play() - p.playing = true p.context.addPlayer(p) } @@ -84,14 +81,13 @@ func (p *readerPlayer) Pause() { defer p.m.Unlock() p.player.Pause() - p.playing = false } func (p *readerPlayer) IsPlaying() bool { p.m.Lock() defer p.m.Unlock() - return p.playing + return p.player.IsPlaying() } func (p *readerPlayer) Volume() float64 { @@ -112,9 +108,7 @@ func (p *readerPlayer) Close() error { p.m.Lock() defer p.m.Unlock() - runtime.SetFinalizer(p, nil) p.context.removePlayer(p) - p.playing = false return p.player.Close() }