|  | @@ -165,32 +165,31 @@ func (this *DokodemoDoor) HandleTCPConnection(conn internet.Connection) {
 | 
	
		
			
				|  |  |  	})
 | 
	
		
			
				|  |  |  	defer ray.InboundOutput().Release()
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	var inputFinish, outputFinish sync.Mutex
 | 
	
		
			
				|  |  | -	inputFinish.Lock()
 | 
	
		
			
				|  |  | -	outputFinish.Lock()
 | 
	
		
			
				|  |  | +	var wg sync.WaitGroup
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	reader := v2net.NewTimeOutReader(this.config.Timeout, conn)
 | 
	
		
			
				|  |  |  	defer reader.Release()
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +	wg.Add(1)
 | 
	
		
			
				|  |  |  	go func() {
 | 
	
		
			
				|  |  |  		v2reader := v2io.NewAdaptiveReader(reader)
 | 
	
		
			
				|  |  |  		defer v2reader.Release()
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  		v2io.Pipe(v2reader, ray.InboundInput())
 | 
	
		
			
				|  |  | -		inputFinish.Unlock()
 | 
	
		
			
				|  |  | +		wg.Done()
 | 
	
		
			
				|  |  |  		ray.InboundInput().Close()
 | 
	
		
			
				|  |  |  	}()
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +	wg.Add(1)
 | 
	
		
			
				|  |  |  	go func() {
 | 
	
		
			
				|  |  |  		v2writer := v2io.NewAdaptiveWriter(conn)
 | 
	
		
			
				|  |  |  		defer v2writer.Release()
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  		v2io.Pipe(ray.InboundOutput(), v2writer)
 | 
	
		
			
				|  |  | -		outputFinish.Unlock()
 | 
	
		
			
				|  |  | +		wg.Done()
 | 
	
		
			
				|  |  |  	}()
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	outputFinish.Lock()
 | 
	
		
			
				|  |  | -	inputFinish.Lock()
 | 
	
		
			
				|  |  | +	wg.Wait()
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  type Factory struct{}
 |