|  | @@ -228,30 +228,41 @@ 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() // Don't release this buffer as it is passed into a Packet.
 |  | 
 | 
											
												
													
														|  | -	request.Write(requestBuffer)
 |  | 
 | 
											
												
													
														|  | -	log.Debug("Request to remote:\n", requestBuffer.Value)
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  |  	ray := this.packetDispatcher.DispatchToOutbound(dest)
 |  |  	ray := this.packetDispatcher.DispatchToOutbound(dest)
 | 
											
												
													
														|  | -	ray.InboundInput().Write(requestBuffer)
 |  | 
 | 
											
												
													
														|  |  	defer ray.InboundInput().Close()
 |  |  	defer ray.InboundInput().Close()
 | 
											
												
													
														|  | 
 |  | +	defer ray.InboundOutput().Release()
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | -	var wg sync.WaitGroup
 |  | 
 | 
											
												
													
														|  | -	wg.Add(1)
 |  | 
 | 
											
												
													
														|  | 
 |  | +	var finish sync.WaitGroup
 | 
											
												
													
														|  | 
 |  | +	finish.Add(1)
 | 
											
												
													
														|  |  	go func() {
 |  |  	go func() {
 | 
											
												
													
														|  | -		defer wg.Done()
 |  | 
 | 
											
												
													
														|  | 
 |  | +		defer finish.Done()
 | 
											
												
													
														|  | 
 |  | +		requestWriter := v2io.NewBufferedWriter(v2io.NewChainWriter(ray.InboundInput()))
 | 
											
												
													
														|  | 
 |  | +		err := request.Write(requestWriter)
 | 
											
												
													
														|  | 
 |  | +		if err != nil {
 | 
											
												
													
														|  | 
 |  | +			log.Warning("HTTP: Failed to write request: ", err)
 | 
											
												
													
														|  | 
 |  | +			return
 | 
											
												
													
														|  | 
 |  | +		}
 | 
											
												
													
														|  | 
 |  | +		requestWriter.Flush()
 | 
											
												
													
														|  | 
 |  | +	}()
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +	finish.Add(1)
 | 
											
												
													
														|  | 
 |  | +	go func() {
 | 
											
												
													
														|  | 
 |  | +		defer finish.Done()
 | 
											
												
													
														|  |  		responseReader := bufio.NewReader(NewChanReader(ray.InboundOutput()))
 |  |  		responseReader := bufio.NewReader(NewChanReader(ray.InboundOutput()))
 | 
											
												
													
														|  |  		response, err := http.ReadResponse(responseReader, request)
 |  |  		response, err := http.ReadResponse(responseReader, request)
 | 
											
												
													
														|  |  		if err != nil {
 |  |  		if err != nil {
 | 
											
												
													
														|  | 
 |  | +			log.Warning("HTTP: Failed to read response: ", err)
 | 
											
												
													
														|  | 
 |  | +			return
 | 
											
												
													
														|  | 
 |  | +		}
 | 
											
												
													
														|  | 
 |  | +		responseWriter := v2io.NewBufferedWriter(writer)
 | 
											
												
													
														|  | 
 |  | +		err = response.Write(responseWriter)
 | 
											
												
													
														|  | 
 |  | +		if err != nil {
 | 
											
												
													
														|  | 
 |  | +			log.Warning("HTTP: Failed to write response: ", err)
 | 
											
												
													
														|  |  			return
 |  |  			return
 | 
											
												
													
														|  |  		}
 |  |  		}
 | 
											
												
													
														|  | -		responseBuffer := alloc.NewBuffer().Clear()
 |  | 
 | 
											
												
													
														|  | -		defer responseBuffer.Release()
 |  | 
 | 
											
												
													
														|  | -		response.Write(responseBuffer)
 |  | 
 | 
											
												
													
														|  | -		writer.Write(responseBuffer.Value)
 |  | 
 | 
											
												
													
														|  | -		response.Body.Close()
 |  | 
 | 
											
												
													
														|  | 
 |  | +		responseWriter.Flush()
 | 
											
												
													
														|  |  	}()
 |  |  	}()
 | 
											
												
													
														|  | -	wg.Wait()
 |  | 
 | 
											
												
													
														|  | 
 |  | +	finish.Wait()
 | 
											
												
													
														|  |  }
 |  |  }
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |  func init() {
 |  |  func init() {
 |