commit 695dd10b2c7a1b0c1227d024e3784e2a3207bc6c
Author: Cecylia Bocovich <[email protected]>
Date:   Fri Apr 26 13:27:20 2019 -0400

    Fix for ticket #30206
    
    This fixes a bug introduced by the deadlock patch for ticket #25688.
---
 proxy-go/snowflake.go | 12 ++++++++----
 1 file changed, 8 insertions(+), 4 deletions(-)

diff --git a/proxy-go/snowflake.go b/proxy-go/snowflake.go
index dda9a9a..12190ac 100644
--- a/proxy-go/snowflake.go
+++ b/proxy-go/snowflake.go
@@ -30,7 +30,7 @@ const pollInterval = 5 * time.Second
 
 //amount of time after sending an SDP answer before the proxy assumes the
 //client is not going to connect
-const dataChannelTimeout = time.Minute
+const dataChannelTimeout = 20 * time.Second
 
 var brokerURL *url.URL
 var relayURL string
@@ -265,6 +265,7 @@ func datachannelHandler(conn *webRTCConn, remoteAddr 
net.Addr) {
 // datachannelHandler.
 func makePeerConnectionFromOffer(sdp *webrtc.SessionDescription, config 
*webrtc.Configuration) (*webrtc.PeerConnection, error) {
 
+       dataChan := make(chan struct{})
        pc, err := webrtc.NewPeerConnection(config)
        if err != nil {
                return nil, fmt.Errorf("accept: NewPeerConnection: %s", err)
@@ -274,6 +275,7 @@ func makePeerConnectionFromOffer(sdp 
*webrtc.SessionDescription, config *webrtc.
        }
        pc.OnDataChannel = func(dc *webrtc.DataChannel) {
                log.Println("OnDataChannel")
+               close(dataChan)
 
                pr, pw := io.Pipe()
                conn := &webRTCConn{pc: pc, dc: dc, pr: pr}
@@ -335,9 +337,11 @@ func makePeerConnectionFromOffer(sdp 
*webrtc.SessionDescription, config *webrtc.
        // advanced to PeerConnectionStateConnected in this time,
        // destroy the peer connection and return the token.
        go func() {
-               <-time.After(dataChannelTimeout)
-               if pc.ConnectionState() != webrtc.PeerConnectionStateConnected {
-                       log.Println("Timed out waiting for client to open data 
cannel.")
+               select {
+               case <-dataChan:
+                       log.Println("Connection successful.")
+               case <-time.After(dataChannelTimeout):
+                       log.Println("Timed out waiting for client to open data 
channel.")
                        pc.Destroy()
                        retToken()
                }



_______________________________________________
tor-commits mailing list
[email protected]
https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits

Reply via email to