diff --git a/client.go b/client.go index ce084102..7fe3bd64 100644 --- a/client.go +++ b/client.go @@ -222,7 +222,7 @@ type Client struct { checkStreamInitial bool tcpLastFrameTime int64 keepaliveTimer *time.Timer - finalErr error + closeError error // connCloser channels connCloserTerminate chan struct{} @@ -412,14 +412,14 @@ func (c *Client) StartPublishing(address string, tracks Tracks) error { func (c *Client) Close() error { c.ctxCancel() <-c.done - return c.finalErr + return c.closeError } // Wait waits until all client resources are closed. // This can happen when a read error occurs or when Close() is called. func (c *Client) Wait() error { <-c.done - return c.finalErr + return c.closeError } // Tracks returns all the tracks that the client is reading or publishing. @@ -444,7 +444,7 @@ func (c *Client) Tracks() Tracks { func (c *Client) run() { defer close(c.done) - c.finalErr = func() error { + c.closeError = func() error { for { select { case req := <-c.options: @@ -1746,7 +1746,7 @@ func (c *Client) WritePacketRTP(trackID int, payload []byte) error { if !c.writeFrameAllowed { select { case <-c.done: - return c.finalErr + return c.closeError default: return nil } @@ -1784,7 +1784,7 @@ func (c *Client) WritePacketRTCP(trackID int, payload []byte) error { if !c.writeFrameAllowed { select { case <-c.done: - return c.finalErr + return c.closeError default: return nil } diff --git a/server.go b/server.go index 79061269..50029048 100644 --- a/server.go +++ b/server.go @@ -142,7 +142,7 @@ type Server struct { udpRTCPListener *serverUDPListener sessions map[string]*ServerSession conns map[*ServerConn]struct{} - exitError error + closeError error streams map[*ServerStream]struct{} // in @@ -302,18 +302,18 @@ func (s *Server) Start() error { return nil } -// Close closes all the server resources. -// It doesn't wait for the server resources to close (use Wait for that). +// Close closes all the server resources and waits for the to close. func (s *Server) Close() error { s.ctxCancel() - return nil + s.wg.Wait() + return s.closeError } // Wait waits until all server resources are closed. // This can happen when a fatal error occurs or when Close() is called. func (s *Server) Wait() error { s.wg.Wait() - return s.exitError + return s.closeError } func (s *Server) run() { @@ -355,7 +355,7 @@ func (s *Server) run() { } }() - s.exitError = func() error { + s.closeError = func() error { for { select { case err := <-acceptErr: diff --git a/server_publish_test.go b/server_publish_test.go index efa7baeb..b2947e9d 100644 --- a/server_publish_test.go +++ b/server_publish_test.go @@ -164,7 +164,6 @@ func TestServerPublishErrorAnnounce(t *testing.T) { err := s.Start() require.NoError(t, err) - defer s.Wait() defer s.Close() conn, err := net.Dial("tcp", "localhost:8554") @@ -252,7 +251,6 @@ func TestServerPublishSetupPath(t *testing.T) { err := s.Start() require.NoError(t, err) - defer s.Wait() defer s.Close() conn, err := net.Dial("tcp", "localhost:8554") @@ -349,7 +347,6 @@ func TestServerPublishErrorSetupDifferentPaths(t *testing.T) { err := s.Start() require.NoError(t, err) - defer s.Wait() defer s.Close() conn, err := net.Dial("tcp", "localhost:8554") @@ -433,7 +430,6 @@ func TestServerPublishErrorSetupTrackTwice(t *testing.T) { err := s.Start() require.NoError(t, err) - defer s.Wait() defer s.Close() conn, err := net.Dial("tcp", "localhost:8554") @@ -534,7 +530,6 @@ func TestServerPublishErrorRecordPartialTracks(t *testing.T) { err := s.Start() require.NoError(t, err) - defer s.Wait() defer s.Close() conn, err := net.Dial("tcp", "localhost:8554") @@ -675,7 +670,6 @@ func TestServerPublish(t *testing.T) { err := s.Start() require.NoError(t, err) - defer s.Wait() defer s.Close() nconn, err := net.Dial("tcp", "localhost:8554") @@ -876,7 +870,6 @@ func TestServerPublishNonStandardFrameSize(t *testing.T) { err := s.Start() require.NoError(t, err) - defer s.Wait() defer s.Close() nconn, err := net.Dial("tcp", "localhost:8554") @@ -978,7 +971,6 @@ func TestServerPublishErrorInvalidProtocol(t *testing.T) { err := s.Start() require.NoError(t, err) - defer s.Wait() defer s.Close() conn, err := net.Dial("tcp", "localhost:8554") @@ -1081,7 +1073,6 @@ func TestServerPublishRTCPReport(t *testing.T) { err := s.Start() require.NoError(t, err) - defer s.Wait() defer s.Close() conn, err := net.Dial("tcp", "localhost:8554") @@ -1242,7 +1233,6 @@ func TestServerPublishTimeout(t *testing.T) { err := s.Start() require.NoError(t, err) - defer s.Wait() defer s.Close() nconn, err := net.Dial("tcp", "localhost:8554") @@ -1372,7 +1362,6 @@ func TestServerPublishWithoutTeardown(t *testing.T) { err := s.Start() require.NoError(t, err) - defer s.Wait() defer s.Close() nconn, err := net.Dial("tcp", "localhost:8554") @@ -1489,7 +1478,6 @@ func TestServerPublishUDPChangeConn(t *testing.T) { err := s.Start() require.NoError(t, err) - defer s.Wait() defer s.Close() sxID := "" diff --git a/server_read_test.go b/server_read_test.go index 5542bed8..3d7d5fa3 100644 --- a/server_read_test.go +++ b/server_read_test.go @@ -110,7 +110,6 @@ func TestServerReadSetupPath(t *testing.T) { err = s.Start() require.NoError(t, err) - defer s.Wait() defer s.Close() conn, err := net.Dial("tcp", "localhost:8554") @@ -176,7 +175,6 @@ func TestServerReadSetupErrors(t *testing.T) { err = s.Start() require.NoError(t, err) - defer s.Wait() defer s.Close() conn, err := net.Dial("tcp", "localhost:8554") @@ -344,7 +342,6 @@ func TestServerRead(t *testing.T) { err = s.Start() require.NoError(t, err) - defer s.Wait() defer s.Close() nconn, err := net.Dial("tcp", listenIP+":8554") @@ -604,7 +601,6 @@ func TestServerReadNonStandardFrameSize(t *testing.T) { err = s.Start() require.NoError(t, err) - defer s.Wait() defer s.Close() nconn, err := net.Dial("tcp", "localhost:8554") @@ -705,7 +701,6 @@ func TestServerReadTCPResponseBeforeFrames(t *testing.T) { err = s.Start() require.NoError(t, err) - defer s.Wait() defer s.Close() conn, err := net.Dial("tcp", "localhost:8554") @@ -778,7 +773,6 @@ func TestServerReadPlayPlay(t *testing.T) { err = s.Start() require.NoError(t, err) - defer s.Wait() defer s.Close() conn, err := net.Dial("tcp", "localhost:8554") @@ -887,7 +881,6 @@ func TestServerReadPlayPausePlay(t *testing.T) { err = s.Start() require.NoError(t, err) - defer s.Wait() defer s.Close() conn, err := net.Dial("tcp", "localhost:8554") @@ -1003,7 +996,6 @@ func TestServerReadPlayPausePause(t *testing.T) { err = s.Start() require.NoError(t, err) - defer s.Wait() defer s.Close() conn, err := net.Dial("tcp", "localhost:8554") @@ -1116,7 +1108,6 @@ func TestServerReadTimeout(t *testing.T) { err = s.Start() require.NoError(t, err) - defer s.Wait() defer s.Close() nconn, err := net.Dial("tcp", "localhost:8554") @@ -1215,7 +1206,6 @@ func TestServerReadWithoutTeardown(t *testing.T) { err = s.Start() require.NoError(t, err) - defer s.Wait() defer s.Close() nconn, err := net.Dial("tcp", "localhost:8554") @@ -1303,7 +1293,6 @@ func TestServerReadUDPChangeConn(t *testing.T) { err = s.Start() require.NoError(t, err) - defer s.Wait() defer s.Close() sxID := "" @@ -1396,7 +1385,6 @@ func TestServerReadErrorUDPSamePorts(t *testing.T) { err = s.Start() require.NoError(t, err) - defer s.Wait() defer s.Close() func() { @@ -1503,7 +1491,6 @@ func TestServerReadNonSetuppedPath(t *testing.T) { err = s.Start() require.NoError(t, err) - defer s.Wait() defer s.Close() conn, err := net.Dial("tcp", "localhost:8554") @@ -1669,7 +1656,6 @@ func TestServerReadAdditionalInfos(t *testing.T) { err = s.Start() require.NoError(t, err) - defer s.Wait() defer s.Close() buf, err := (&rtp.Packet{ diff --git a/server_test.go b/server_test.go index f6524cb5..c2cb51d3 100644 --- a/server_test.go +++ b/server_test.go @@ -436,7 +436,6 @@ func TestServerHighLevelPublishRead(t *testing.T) { err := s.Start() require.NoError(t, err) - defer s.Wait() defer s.Close() switch ca.publisherSoft { @@ -538,7 +537,6 @@ func TestServerClose(t *testing.T) { err := s.Start() require.NoError(t, err) - defer s.Wait() s.Close() s.Close() } @@ -583,7 +581,6 @@ func TestServerConnClose(t *testing.T) { err := s.Start() require.NoError(t, err) - defer s.Wait() defer s.Close() conn, err := net.Dial("tcp", "localhost:8554") @@ -599,7 +596,6 @@ func TestServerCSeq(t *testing.T) { } err := s.Start() require.NoError(t, err) - defer s.Wait() defer s.Close() conn, err := net.Dial("tcp", "localhost:8554") @@ -634,7 +630,6 @@ func TestServerErrorCSeqMissing(t *testing.T) { } err := s.Start() require.NoError(t, err) - defer s.Wait() defer s.Close() conn, err := net.Dial("tcp", "localhost:8554") @@ -667,7 +662,6 @@ func TestServerErrorInvalidMethod(t *testing.T) { } err := s.Start() require.NoError(t, err) - defer s.Wait() defer s.Close() conn, err := net.Dial("tcp", "localhost:8554") @@ -717,7 +711,6 @@ func TestServerErrorTCPTwoConnOneSession(t *testing.T) { err = s.Start() require.NoError(t, err) - defer s.Wait() defer s.Close() conn1, err := net.Dial("tcp", "localhost:8554") @@ -816,7 +809,6 @@ func TestServerErrorTCPOneConnTwoSessions(t *testing.T) { err = s.Start() require.NoError(t, err) - defer s.Wait() defer s.Close() conn, err := net.Dial("tcp", "localhost:8554") @@ -903,7 +895,6 @@ func TestServerGetSetParameter(t *testing.T) { err := s.Start() require.NoError(t, err) - defer s.Wait() defer s.Close() conn, err := net.Dial("tcp", "localhost:8554") @@ -976,7 +967,6 @@ func TestServerErrorInvalidSession(t *testing.T) { err := s.Start() require.NoError(t, err) - defer s.Wait() defer s.Close() conn, err := net.Dial("tcp", "localhost:8554") @@ -1020,7 +1010,6 @@ func TestServerSessionClose(t *testing.T) { err := s.Start() require.NoError(t, err) - defer s.Wait() defer s.Close() conn, err := net.Dial("tcp", "localhost:8554") @@ -1076,7 +1065,6 @@ func TestServerSessionAutoClose(t *testing.T) { err = s.Start() require.NoError(t, err) - defer s.Wait() defer s.Close() conn, err := net.Dial("tcp", "localhost:8554") @@ -1155,7 +1143,6 @@ func TestServerErrorInvalidPath(t *testing.T) { err = s.Start() require.NoError(t, err) - defer s.Wait() defer s.Close() conn, err := net.Dial("tcp", "localhost:8554")