commit fd2f3d523bf5a6f20fdfbb9fe7ed8b91bc7f906d Author: David Fifield david@bamsoftware.com Date: Sun Nov 11 19:39:28 2012 -0800
Use a simpler means of waiting for read loops to end. --- websocket-transport/websocket-client.go | 20 ++++++-------------- 1 files changed, 6 insertions(+), 14 deletions(-)
diff --git a/websocket-transport/websocket-client.go b/websocket-transport/websocket-client.go index 6cce020..fcb9767 100644 --- a/websocket-transport/websocket-client.go +++ b/websocket-transport/websocket-client.go @@ -23,11 +23,9 @@ func logDebug(format string, v ...interface{}) { }
func proxy(local *net.TCPConn, ws *websocket.Conn) { - var localToWs chan bool - var wsToLocal chan bool + finishedChan := make(chan int)
// Local-to-WebSocket read loop. - localToWs = make(chan bool, 1) go func() { buf := make([]byte, bufSiz) var err error @@ -51,11 +49,10 @@ func proxy(local *net.TCPConn, ws *websocket.Conn) { local.CloseRead() ws.Close()
- localToWs <- true + finishedChan <- 1 }()
// WebSocket-to-local read loop. - wsToLocal = make(chan bool, 1) go func() { var buf []byte var err error @@ -81,17 +78,12 @@ func proxy(local *net.TCPConn, ws *websocket.Conn) { local.CloseWrite() ws.Close()
- wsToLocal <- true + finishedChan <- 1 }()
- // Select twice, once for each read loop. - select { - case <-localToWs: - case <-wsToLocal: - } - select { - case <-localToWs: - case <-wsToLocal: + // Wait for both read loops to finish. + for i := 0; i < 2; i++ { + <-finishedChan } }
tor-commits@lists.torproject.org