prevent deadlock in shadowsocks

pull/314/head
Darien Raymond 8 years ago
parent bae0de7d95
commit 3a15f799c2
No known key found for this signature in database
GPG Key ID: 7251FFA14BB18169

@ -101,9 +101,6 @@ func (this *Client) Dispatch(destination v2net.Destination, payload *alloc.Buffe
return errors.New("Shadowsocks|Client: Failed to write payload: " + err.Error()) return errors.New("Shadowsocks|Client: Failed to write payload: " + err.Error())
} }
bufferedWriter.SetCached(false)
v2io.Pipe(ray.OutboundInput(), bodyWriter)
var responseMutex sync.Mutex var responseMutex sync.Mutex
responseMutex.Lock() responseMutex.Lock()
@ -119,19 +116,13 @@ func (this *Client) Dispatch(destination v2net.Destination, payload *alloc.Buffe
v2io.Pipe(responseReader, ray.OutboundOutput()) v2io.Pipe(responseReader, ray.OutboundOutput())
}() }()
bufferedWriter.SetCached(false)
v2io.Pipe(ray.OutboundInput(), bodyWriter)
responseMutex.Lock() responseMutex.Lock()
} }
if request.Command == protocol.RequestCommandUDP { if request.Command == protocol.RequestCommandUDP {
writer := &UDPWriter{
Writer: conn,
Request: request,
}
if err := writer.Write(payload); err != nil {
return errors.New("Shadowsocks|Client: Failed to write payload: " + err.Error())
}
v2io.Pipe(ray.OutboundInput(), writer)
timedReader := v2net.NewTimeOutReader(16, conn) timedReader := v2net.NewTimeOutReader(16, conn)
var responseMutex sync.Mutex var responseMutex sync.Mutex
responseMutex.Lock() responseMutex.Lock()
@ -147,6 +138,15 @@ func (this *Client) Dispatch(destination v2net.Destination, payload *alloc.Buffe
v2io.Pipe(reader, ray.OutboundOutput()) v2io.Pipe(reader, ray.OutboundOutput())
}() }()
writer := &UDPWriter{
Writer: conn,
Request: request,
}
if err := writer.Write(payload); err != nil {
return errors.New("Shadowsocks|Client: Failed to write payload: " + err.Error())
}
v2io.Pipe(ray.OutboundInput(), writer)
responseMutex.Lock() responseMutex.Lock()
} }

Loading…
Cancel
Save