Browse Source

fixes for mutex usage

v2ray 9 years ago
parent
commit
5f6d932c03
1 changed files with 5 additions and 4 deletions
  1. 5 4
      proxy/http/http.go

+ 5 - 4
proxy/http/http.go

@@ -50,7 +50,9 @@ func (this *HttpProxyServer) Listen(port v2net.Port) error {
 	if err != nil {
 	if err != nil {
 		return err
 		return err
 	}
 	}
+	this.Lock()
 	this.tcpListener = tcpListener
 	this.tcpListener = tcpListener
+	this.Unlock()
 	this.accepting = true
 	this.accepting = true
 	go this.accept()
 	go this.accept()
 	return nil
 	return nil
@@ -216,7 +218,7 @@ func (this *HttpProxyServer) handlePlainHTTP(request *http.Request, dest v2net.D
 	request.Host = request.URL.Host
 	request.Host = request.URL.Host
 	stripHopByHopHeaders(request)
 	stripHopByHopHeaders(request)
 
 
-	requestBuffer := alloc.NewBuffer().Clear()
+	requestBuffer := alloc.NewBuffer().Clear() // Don't release this buffer as it is passed into a Packet.
 	request.Write(requestBuffer)
 	request.Write(requestBuffer)
 	log.Info("Request to remote:\n%s", string(requestBuffer.Value))
 	log.Info("Request to remote:\n%s", string(requestBuffer.Value))
 
 
@@ -229,13 +231,12 @@ func (this *HttpProxyServer) handlePlainHTTP(request *http.Request, dest v2net.D
 	go func() {
 	go func() {
 		defer wg.Done()
 		defer wg.Done()
 		responseReader := bufio.NewReader(NewChanReader(ray.InboundOutput()))
 		responseReader := bufio.NewReader(NewChanReader(ray.InboundOutput()))
-		responseBuffer := alloc.NewBuffer()
-		defer responseBuffer.Release()
 		response, err := http.ReadResponse(responseReader, request)
 		response, err := http.ReadResponse(responseReader, request)
 		if err != nil {
 		if err != nil {
 			return
 			return
 		}
 		}
-		responseBuffer.Clear()
+		responseBuffer := alloc.NewBuffer().Clear()
+		defer responseBuffer.Release()
 		response.Write(responseBuffer)
 		response.Write(responseBuffer)
 		writer.Write(responseBuffer.Value)
 		writer.Write(responseBuffer.Value)
 		response.Body.Close()
 		response.Body.Close()