@@ -257,7 +257,7 @@ func (r *RTPReceiver) startReceive(parameters RTPReceiveParameters) error { //no
257257 rtcpReadStream := result .rtcpReadStream
258258 rtcpInterceptor := result .rtcpInterceptor
259259
260- if err = r .receiveForRtx (
260+ if err = r .receiveForRtxInternal (
261261 rtxSsrc ,
262262 "" ,
263263 streamInfo ,
@@ -552,6 +552,10 @@ func (r *RTPReceiver) receiveForRid(
552552 r .mu .Lock ()
553553 defer r .mu .Unlock ()
554554
555+ if r .haveClosed () {
556+ return nil , io .EOF
557+ }
558+
555559 for i := range r .tracks {
556560 if r .tracks [i ].track .RID () == rid {
557561 r .tracks [i ].track .mu .Lock ()
@@ -576,8 +580,6 @@ func (r *RTPReceiver) receiveForRid(
576580}
577581
578582// receiveForRtx starts a routine that processes the repair stream.
579- //
580- //nolint:cyclop
581583func (r * RTPReceiver ) receiveForRtx (
582584 ssrc SSRC ,
583585 rsid string ,
@@ -587,6 +589,34 @@ func (r *RTPReceiver) receiveForRtx(
587589 rtcpReadStream * srtp.ReadStreamSRTCP ,
588590 rtcpInterceptor interceptor.RTCPReader ,
589591) error {
592+ r .mu .Lock ()
593+ defer r .mu .Unlock ()
594+
595+ return r .receiveForRtxInternal (
596+ ssrc ,
597+ rsid ,
598+ streamInfo ,
599+ rtpReadStream ,
600+ rtpInterceptor ,
601+ rtcpReadStream ,
602+ rtcpInterceptor ,
603+ )
604+ }
605+
606+ //nolint:gocognit,cyclop
607+ func (r * RTPReceiver ) receiveForRtxInternal (
608+ ssrc SSRC ,
609+ rsid string ,
610+ streamInfo * interceptor.StreamInfo ,
611+ rtpReadStream * srtp.ReadStreamSRTP ,
612+ rtpInterceptor interceptor.RTPReader ,
613+ rtcpReadStream * srtp.ReadStreamSRTCP ,
614+ rtcpInterceptor interceptor.RTCPReader ,
615+ ) error {
616+ if r .haveClosed () {
617+ return io .EOF
618+ }
619+
590620 var track * trackStreams
591621 if ssrc != 0 && len (r .tracks ) == 1 {
592622 track = & r .tracks [0 ]
0 commit comments