From 7bf111f98a655c5c8355a66a969c546c466bf22f Mon Sep 17 00:00:00 2001 From: aler9 <46489434+aler9@users.noreply.github.com> Date: Sun, 23 Jan 2022 22:39:44 +0100 Subject: [PATCH] client: cleanup --- client.go | 35 ++++++++++++++++------------------- 1 file changed, 16 insertions(+), 19 deletions(-) diff --git a/client.go b/client.go index 005b723e..ff0fc90e 100644 --- a/client.go +++ b/client.go @@ -580,25 +580,31 @@ func (c *Client) run() { c.ctxCancel() - c.doClose(true) + c.doClose() } -func (c *Client) doClose(isClosing bool) { +func (c *Client) doClose() { if c.state == clientStatePlay || c.state == clientStateRecord { if *c.protocol == TransportUDP || *c.protocol == TransportUDPMulticast { - // stop UDP listeners for _, cct := range c.tracks { cct.udpRTPListener.stop() cct.udpRTCPListener.stop() } } - c.playRecordStop(isClosing) + c.playRecordStop(true) c.do(&base.Request{ Method: base.Teardown, URL: c.streamBaseURL, }, true) + + c.conn.Close() + c.conn = nil + } else if c.conn != nil { + c.connCloserStop() + c.conn.Close() + c.conn = nil } for _, track := range c.tracks { @@ -607,16 +613,10 @@ func (c *Client) doClose(isClosing bool) { track.udpRTCPListener.close() } } - - if c.conn != nil { - c.connCloserStop() - c.conn.Close() - c.conn = nil - } } func (c *Client) reset() { - c.doClose(false) + c.doClose() c.state = clientStateInitial c.session = "" @@ -877,8 +877,10 @@ func (c *Client) connOpen() error { func (c *Client) connCloserStart() { c.connCloserTerminate = make(chan struct{}) c.connCloserDone = make(chan struct{}) + go func() { defer close(c.connCloserDone) + select { case <-c.ctx.Done(): c.conn.Close() @@ -889,11 +891,9 @@ func (c *Client) connCloserStart() { } func (c *Client) connCloserStop() { - if c.connCloserDone != nil { - close(c.connCloserTerminate) - <-c.connCloserDone - c.connCloserDone = nil - } + close(c.connCloserTerminate) + <-c.connCloserDone + c.connCloserDone = nil } func (c *Client) do(req *base.Request, skipResponse bool) (*base.Response, error) { @@ -1628,7 +1628,6 @@ func (c *Client) doPlay(ra *headers.Range, isSwitchingProtocol bool) (*base.Resp if res.StatusCode != base.StatusOK { if *c.protocol == TransportUDP || *c.protocol == TransportUDPMulticast { - // stop UDP listeners for _, cct := range c.tracks { cct.udpRTPListener.stop() cct.udpRTCPListener.stop() @@ -1704,7 +1703,6 @@ func (c *Client) doRecord() (*base.Response, error) { if res.StatusCode != base.StatusOK { if *c.protocol == TransportUDP { - // stop UDP listeners for _, cct := range c.tracks { cct.udpRTPListener.stop() cct.udpRTCPListener.stop() @@ -1749,7 +1747,6 @@ func (c *Client) doPause() (*base.Response, error) { c.playRecordStop(false) if *c.protocol == TransportUDP || *c.protocol == TransportUDPMulticast { - // stop UDP listeners for _, cct := range c.tracks { cct.udpRTPListener.stop() cct.udpRTCPListener.stop()