Skip to content

Commit 28bb637

Browse files
authored
Fix deadlock in senders closing (#211)
1 parent 5a047f5 commit 28bb637

File tree

2 files changed

+6
-6
lines changed

2 files changed

+6
-6
lines changed

pkg/receiver.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -141,8 +141,8 @@ func (w *WebRTCReceiver) SpatialLayer() uint8 {
141141

142142
//closeSenders Close all senders from Receiver
143143
func (w *WebRTCReceiver) closeSenders() {
144-
w.Lock()
145-
defer w.Unlock()
144+
w.RLock()
145+
defer w.RUnlock()
146146
for _, sender := range w.senders {
147147
sender.Close()
148148
}

pkg/sender.go

+4-4
Original file line numberDiff line numberDiff line change
@@ -100,10 +100,6 @@ func (s *WebRTCSender) Close() {
100100

101101
func (s *WebRTCSender) close() {
102102
s.cancel()
103-
// Remove sender from receiver
104-
if recv := s.router.GetReceiver(0); recv != nil {
105-
recv.DeleteSender(s.id)
106-
}
107103
if s.onCloseHandler != nil {
108104
s.onCloseHandler()
109105
}
@@ -118,6 +114,10 @@ func (s *WebRTCSender) receiveRTCP() {
118114
for {
119115
pkts, err := s.sender.ReadRTCP()
120116
if err == io.ErrClosedPipe || s.ctx.Err() != nil {
117+
// Remove sender from receiver
118+
if recv := s.router.GetReceiver(0); recv != nil {
119+
recv.DeleteSender(s.id)
120+
}
121121
s.Close()
122122
return
123123
}

0 commit comments

Comments
 (0)