From: Matt Joiner Date: Tue, 12 Jul 2022 00:42:35 +0000 (+1000) Subject: Also close created data channels when cleaning up webrtc conns X-Git-Tag: v1.47.0~1^2~1 X-Git-Url: http://www.git.stargrave.org/?a=commitdiff_plain;h=3aa23204429dc00873479d4a18306370b834eb5b;p=btrtrc.git Also close created data channels when cleaning up webrtc conns --- diff --git a/webtorrent/tracker-client.go b/webtorrent/tracker-client.go index 311b296a..b0ca6c2c 100644 --- a/webtorrent/tracker-client.go +++ b/webtorrent/tracker-client.go @@ -191,6 +191,7 @@ func (tc *TrackerClient) announceOffers() { func (tc *TrackerClient) closeUnusedOffers() { for _, offer := range tc.outboundOffers { offer.peerConnection.Close() + offer.dataChannel.Close() } tc.outboundOffers = nil } diff --git a/webtorrent/transport.go b/webtorrent/transport.go index da56e40d..85299086 100644 --- a/webtorrent/transport.go +++ b/webtorrent/transport.go @@ -232,13 +232,18 @@ func initDataChannel( // This shouldn't happen if the API is configured correctly, and we call from OnOpen. panic(err) } - onOpen(hookDataChannelCloser(raw, pc, span), ctx, span) + onOpen(hookDataChannelCloser(raw, pc, span, dc), ctx, span) }) } // Hooks the datachannel's Close to Close the owning PeerConnection. The datachannel takes ownership // and responsibility for the PeerConnection. -func hookDataChannelCloser(dcrwc datachannel.ReadWriteCloser, pc *wrappedPeerConnection, dataChannelSpan trace.Span) datachannel.ReadWriteCloser { +func hookDataChannelCloser( + dcrwc datachannel.ReadWriteCloser, + pc *wrappedPeerConnection, + dataChannelSpan trace.Span, + originalDataChannel *webrtc.DataChannel, +) datachannel.ReadWriteCloser { return struct { datachannelReadWriter io.Closer @@ -247,6 +252,7 @@ func hookDataChannelCloser(dcrwc datachannel.ReadWriteCloser, pc *wrappedPeerCon ioCloserFunc(func() error { dcrwc.Close() pc.Close() + originalDataChannel.Close() dataChannelSpan.End() return nil }),