]> Sergey Matveev's repositories - btrtrc.git/commitdiff
Also close created data channels when cleaning up webrtc conns
authorMatt Joiner <anacrolix@gmail.com>
Tue, 12 Jul 2022 00:42:35 +0000 (10:42 +1000)
committerMatt Joiner <anacrolix@gmail.com>
Tue, 12 Jul 2022 06:15:50 +0000 (16:15 +1000)
webtorrent/tracker-client.go
webtorrent/transport.go

index 311b296a8965d37cbf14f91c060c575cd9a649e4..b0ca6c2c35289de8bcb89864fc4e1a1db2cf33b2 100644 (file)
@@ -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
 }
index da56e40d1a2ef1d9ec34d8b0ca780c489d139b3b..852990860e00d9e27b0b4a81d26a2d4c90647e64 100644 (file)
@@ -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
                }),