瀏覽代碼

Fix usage of Mutex

V2Ray 10 年之前
父節點
當前提交
bb442b4f83
共有 4 個文件被更改,包括 16 次插入16 次删除
  1. 4 4
      proxy/freedom/freedom.go
  2. 4 4
      proxy/socks/socks.go
  3. 4 4
      proxy/vmess/vmessin.go
  4. 4 4
      proxy/vmess/vmessout.go

+ 4 - 4
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)

+ 4 - 4
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()
 }

+ 4 - 4
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()
 }

+ 4 - 4
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[:])