Call explicit frees in server-webrtc.

https://bugs.torproject.org/21312

Cf. corresponding change for proxy-go:
https://gitweb.torproject.org/pluggable-transports/snowflake.git/commit/?id=ff8f3851082e8f7f8b4c8b99b161be35020aeb67
This commit is contained in:
David Fifield 2018-03-12 19:59:21 -07:00 committed by Arlo Breault
parent 42ec097a58
commit c834c76fc5

View file

@ -52,12 +52,14 @@ func (c *webRTCConn) Read(b []byte) (int, error) {
func (c *webRTCConn) Write(b []byte) (int, error) { func (c *webRTCConn) Write(b []byte) (int, error) {
// log.Printf("webrtc Write %d %+q", len(b), string(b)) // log.Printf("webrtc Write %d %+q", len(b), string(b))
log.Printf("Write %d bytes --> WebRTC", len(b)) log.Printf("Write %d bytes --> WebRTC", len(b))
if c.dc != nil {
c.dc.Send(b) c.dc.Send(b)
}
return len(b), nil return len(b), nil
} }
func (c *webRTCConn) Close() error { func (c *webRTCConn) Close() error {
return c.pc.Close() return c.pc.Destroy()
} }
func (c *webRTCConn) LocalAddr() net.Addr { func (c *webRTCConn) LocalAddr() net.Addr {
@ -121,12 +123,16 @@ func makePeerConnectionFromOffer(sdp *webrtc.SessionDescription, config *webrtc.
pr, pw := io.Pipe() pr, pw := io.Pipe()
conn := &webRTCConn{pc: pc, dc: dc, pr: pr}
dc.OnOpen = func() { dc.OnOpen = func() {
log.Println("OnOpen channel") log.Println("OnOpen channel")
} }
dc.OnClose = func() { dc.OnClose = func() {
log.Println("OnClose channel") log.Println("OnClose channel")
pw.Close() pw.Close()
conn.dc = nil
pc.DeleteDataChannel(dc)
} }
dc.OnMessage = func(msg []byte) { dc.OnMessage = func(msg []byte) {
log.Printf("OnMessage <--- %d bytes", len(msg)) log.Printf("OnMessage <--- %d bytes", len(msg))
@ -139,13 +145,12 @@ func makePeerConnectionFromOffer(sdp *webrtc.SessionDescription, config *webrtc.
} }
} }
conn := &webRTCConn{pc: pc, dc: dc, pr: pr}
go datachannelHandler(conn) go datachannelHandler(conn)
} }
err = pc.SetRemoteDescription(sdp) err = pc.SetRemoteDescription(sdp)
if err != nil { if err != nil {
pc.Close() pc.Destroy()
return nil, fmt.Errorf("accept: SetRemoteDescription: %s", err) return nil, fmt.Errorf("accept: SetRemoteDescription: %s", err)
} }
log.Println("sdp offer successfully received.") log.Println("sdp offer successfully received.")
@ -167,11 +172,11 @@ func makePeerConnectionFromOffer(sdp *webrtc.SessionDescription, config *webrtc.
// Wait until answer is ready. // Wait until answer is ready.
select { select {
case err = <-errChan: case err = <-errChan:
pc.Close() pc.Destroy()
return nil, err return nil, err
case _, ok := <-answerChan: case _, ok := <-answerChan:
if !ok { if !ok {
pc.Close() pc.Destroy()
return nil, fmt.Errorf("Failed gathering ICE candidates.") return nil, fmt.Errorf("Failed gathering ICE candidates.")
} }
} }