Skip to content

Commit 29bf0af

Browse files
committed
Check for closed receiver before setting up rid
1 parent f3177f8 commit 29bf0af

File tree

2 files changed

+33
-6
lines changed

2 files changed

+33
-6
lines changed

peerconnection.go

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1875,9 +1875,6 @@ func (pc *PeerConnection) handleIncomingSSRC(rtpStream *srtp.ReadStreamSRTP, ssr
18751875
}
18761876

18771877
if rsid != "" {
1878-
receiver.mu.Lock()
1879-
defer receiver.mu.Unlock()
1880-
18811878
return receiver.receiveForRtx(SSRC(0), rsid, streamInfo, readStream, interceptor, rtcpReadStream, rtcpInterceptor)
18821879
}
18831880

rtpreceiver.go

Lines changed: 33 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -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
581583
func (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

Comments
 (0)