From bb442b4f83aab7e19ab135434cabd8204100ab67 Mon Sep 17 00:00:00 2001 From: V2Ray Date: Wed, 23 Sep 2015 17:13:50 +0200 Subject: [PATCH] Fix usage of Mutex --- proxy/freedom/freedom.go | 8 ++++---- proxy/socks/socks.go | 8 ++++---- proxy/vmess/vmessin.go | 8 ++++---- proxy/vmess/vmessout.go | 8 ++++---- 4 files changed, 16 insertions(+), 16 deletions(-) diff --git a/proxy/freedom/freedom.go b/proxy/freedom/freedom.go index db2a7273c..884f61007 100644 --- a/proxy/freedom/freedom.go +++ b/proxy/freedom/freedom.go @@ -46,8 +46,8 @@ func (vconn *FreedomConnection) Start(ray core.OutboundRay) error { readMutex.Lock() writeMutex.Lock() - go dumpInput(conn, input, writeMutex) - go dumpOutput(conn, output, readMutex) + go dumpInput(conn, input, &writeMutex) + go dumpOutput(conn, output, &readMutex) go func() { writeMutex.Lock() @@ -61,12 +61,12 @@ func (vconn *FreedomConnection) Start(ray core.OutboundRay) error { return nil } -func dumpInput(conn net.Conn, input <-chan []byte, finish sync.Mutex) { +func dumpInput(conn net.Conn, input <-chan []byte, finish *sync.Mutex) { v2net.ChanToWriter(conn, input) finish.Unlock() } -func dumpOutput(conn net.Conn, output chan<- []byte, finish sync.Mutex) { +func dumpOutput(conn net.Conn, output chan<- []byte, finish *sync.Mutex) { v2net.ReaderToChan(output, conn) finish.Unlock() close(output) diff --git a/proxy/socks/socks.go b/proxy/socks/socks.go index f6b19ed1d..9286a627e 100644 --- a/proxy/socks/socks.go +++ b/proxy/socks/socks.go @@ -178,20 +178,20 @@ func (server *SocksServer) HandleConnection(connection net.Conn) error { readFinish.Lock() writeFinish.Lock() - go dumpInput(reader, input, readFinish) - go dumpOutput(connection, output, writeFinish) + go dumpInput(reader, input, &readFinish) + go dumpOutput(connection, output, &writeFinish) writeFinish.Lock() return nil } -func dumpInput(reader io.Reader, input chan<- []byte, finish sync.Mutex) { +func dumpInput(reader io.Reader, input chan<- []byte, finish *sync.Mutex) { v2net.ReaderToChan(input, reader) finish.Unlock() close(input) } -func dumpOutput(writer io.Writer, output <-chan []byte, finish sync.Mutex) { +func dumpOutput(writer io.Writer, output <-chan []byte, finish *sync.Mutex) { v2net.ChanToWriter(writer, output) finish.Unlock() } diff --git a/proxy/vmess/vmessin.go b/proxy/vmess/vmessin.go index 7ae7b7cfe..250aa2200 100644 --- a/proxy/vmess/vmessin.go +++ b/proxy/vmess/vmessin.go @@ -82,7 +82,7 @@ func (handler *VMessInboundHandler) HandleConnection(connection net.Conn) error readFinish.Lock() writeFinish.Lock() - go handleInput(request, connection, input, readFinish) + go handleInput(request, connection, input, &readFinish) responseKey := md5.Sum(request.RequestKey[:]) responseIV := md5.Sum(request.RequestIV[:]) @@ -100,7 +100,7 @@ func (handler *VMessInboundHandler) HandleConnection(connection net.Conn) error if data, open := <-output; open { buffer = append(buffer, data...) responseWriter.Write(buffer) - go handleOutput(request, responseWriter, output, writeFinish) + go handleOutput(request, responseWriter, output, &writeFinish) writeFinish.Lock() } @@ -112,7 +112,7 @@ func (handler *VMessInboundHandler) HandleConnection(connection net.Conn) error return nil } -func handleInput(request *protocol.VMessRequest, reader io.Reader, input chan<- []byte, finish sync.Mutex) { +func handleInput(request *protocol.VMessRequest, reader io.Reader, input chan<- []byte, finish *sync.Mutex) { defer close(input) defer finish.Unlock() @@ -125,7 +125,7 @@ func handleInput(request *protocol.VMessRequest, reader io.Reader, input chan<- v2net.ReaderToChan(input, requestReader) } -func handleOutput(request *protocol.VMessRequest, writer io.Writer, output <-chan []byte, finish sync.Mutex) { +func handleOutput(request *protocol.VMessRequest, writer io.Writer, output <-chan []byte, finish *sync.Mutex) { v2net.ChanToWriter(writer, output) finish.Unlock() } diff --git a/proxy/vmess/vmessout.go b/proxy/vmess/vmessout.go index 86337663e..1aa97efdc 100644 --- a/proxy/vmess/vmessout.go +++ b/proxy/vmess/vmessout.go @@ -114,8 +114,8 @@ func startCommunicate(request *protocol.VMessRequest, dest v2net.Destination, ra requestFinish.Lock() responseFinish.Lock() - go handleRequest(conn, request, input, requestFinish) - go handleResponse(conn, request, output, responseFinish) + go handleRequest(conn, request, input, &requestFinish) + go handleResponse(conn, request, output, &responseFinish) requestFinish.Lock() conn.CloseWrite() @@ -123,7 +123,7 @@ func startCommunicate(request *protocol.VMessRequest, dest v2net.Destination, ra return nil } -func handleRequest(conn *net.TCPConn, request *protocol.VMessRequest, input <-chan []byte, finish sync.Mutex) { +func handleRequest(conn *net.TCPConn, request *protocol.VMessRequest, input <-chan []byte, finish *sync.Mutex) { defer finish.Unlock() encryptRequestWriter, err := v2io.NewAesEncryptWriter(request.RequestKey[:], request.RequestIV[:], conn) if err != nil { @@ -155,7 +155,7 @@ func handleRequest(conn *net.TCPConn, request *protocol.VMessRequest, input <-ch return } -func handleResponse(conn *net.TCPConn, request *protocol.VMessRequest, output chan<- []byte, finish sync.Mutex) { +func handleResponse(conn *net.TCPConn, request *protocol.VMessRequest, output chan<- []byte, finish *sync.Mutex) { defer finish.Unlock() defer close(output) responseKey := md5.Sum(request.RequestKey[:])