diff --git a/proxy/dokodemo/dokodemo.go b/proxy/dokodemo/dokodemo.go index 25003aa85..054f2490f 100644 --- a/proxy/dokodemo/dokodemo.go +++ b/proxy/dokodemo/dokodemo.go @@ -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{}