From f2d95b7e399ce501dbfed5e3754ae35444987708 Mon Sep 17 00:00:00 2001 From: aler9 <46489434+aler9@users.noreply.github.com> Date: Sun, 19 Jul 2020 18:50:43 +0200 Subject: [PATCH] fix freeze while proxying --- source.go | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/source.go b/source.go index 763ed259..d5ee05e8 100644 --- a/source.go +++ b/source.go @@ -252,7 +252,7 @@ func (s *source) runUdp(conn *gortsplib.ConnClient) bool { s.p.events <- programEventStreamerReady{s} - tcpConnDone := make(chan error, 1) + tcpConnDone := make(chan error) go func() { tcpConnDone <- conn.LoopUDP(s.u) }() @@ -266,6 +266,8 @@ outer: for { select { case <-s.terminate: + conn.NetConn().Close() + <-tcpConnDone ret = false break outer @@ -278,6 +280,8 @@ outer: for trackId := range s.tracks { if time.Since(s.rtcpReceivers[trackId].LastFrameTime()) >= s.p.conf.ReadTimeout { s.log("ERR: stream is dead") + conn.NetConn().Close() + <-tcpConnDone ret = true break outer } @@ -339,7 +343,7 @@ func (s *source) runTcp(conn *gortsplib.ConnClient) bool { frame := &gortsplib.InterleavedFrame{} - tcpConnDone := make(chan error, 1) + tcpConnDone := make(chan error) go func() { for { frame.Content = s.readBuf.swap() @@ -366,6 +370,8 @@ outer: for { select { case <-s.terminate: + conn.NetConn().Close() + <-tcpConnDone ret = false break outer