fix race condition
This commit is contained in:
@ -41,13 +41,6 @@ func (l *mwsListener) parseMetadata(md mdata.Metadata) (err error) {
|
||||
readBufferSize = "readBufferSize"
|
||||
writeBufferSize = "writeBufferSize"
|
||||
enableCompression = "enableCompression"
|
||||
|
||||
muxKeepAliveDisabled = "muxKeepAliveDisabled"
|
||||
muxKeepAliveInterval = "muxKeepAliveInterval"
|
||||
muxKeepAliveTimeout = "muxKeepAliveTimeout"
|
||||
muxMaxFrameSize = "muxMaxFrameSize"
|
||||
muxMaxReceiveBuffer = "muxMaxReceiveBuffer"
|
||||
muxMaxStreamBuffer = "muxMaxStreamBuffer"
|
||||
)
|
||||
|
||||
l.md.path = mdutil.GetString(md, path)
|
||||
|
@ -23,7 +23,7 @@ func (c *redirConn) Read(b []byte) (n int, err error) {
|
||||
|
||||
c.once.Do(func() {
|
||||
n = copy(b, c.buf)
|
||||
bufpool.Put(&c.buf)
|
||||
bufpool.Put(c.buf)
|
||||
})
|
||||
|
||||
if n == 0 {
|
||||
|
@ -45,7 +45,7 @@ func (l *redirectListener) listenUDP(addr string) (*net.UDPConn, error) {
|
||||
func (l *redirectListener) accept() (conn net.Conn, err error) {
|
||||
b := bufpool.Get(l.md.readBufferSize)
|
||||
|
||||
n, raddr, dstAddr, err := readFromUDP(l.ln, *b)
|
||||
n, raddr, dstAddr, err := readFromUDP(l.ln, b)
|
||||
if err != nil {
|
||||
l.logger.Error(err)
|
||||
return
|
||||
@ -65,7 +65,7 @@ func (l *redirectListener) accept() (conn net.Conn, err error) {
|
||||
|
||||
conn = &redirConn{
|
||||
Conn: c,
|
||||
buf: (*b)[:n],
|
||||
buf: b[:n],
|
||||
ttl: l.md.ttl,
|
||||
}
|
||||
return
|
||||
@ -81,12 +81,12 @@ func readFromUDP(conn *net.UDPConn, b []byte) (n int, remoteAddr *net.UDPAddr, d
|
||||
oob := bufpool.Get(1024)
|
||||
defer bufpool.Put(oob)
|
||||
|
||||
n, oobn, _, remoteAddr, err := conn.ReadMsgUDP(b, *oob)
|
||||
n, oobn, _, remoteAddr, err := conn.ReadMsgUDP(b, oob)
|
||||
if err != nil {
|
||||
return 0, nil, nil, err
|
||||
}
|
||||
|
||||
msgs, err := unix.ParseSocketControlMessage((*oob)[:oobn])
|
||||
msgs, err := unix.ParseSocketControlMessage(oob[:oobn])
|
||||
if err != nil {
|
||||
return 0, nil, nil, fmt.Errorf("parsing socket control message: %s", err)
|
||||
}
|
||||
|
@ -24,7 +24,7 @@ func (d *tunDevice) Read(p []byte) (n int, err error) {
|
||||
b := bufpool.Get(rbuf)
|
||||
defer bufpool.Put(b)
|
||||
|
||||
n, err = d.dev.Read(*b, tunOffsetBytes)
|
||||
n, err = d.dev.Read(b, tunOffsetBytes)
|
||||
if n <= tunOffsetBytes || err != nil {
|
||||
d.dev.Flush()
|
||||
if n <= tunOffsetBytes {
|
||||
@ -33,7 +33,7 @@ func (d *tunDevice) Read(p []byte) (n int, err error) {
|
||||
return
|
||||
}
|
||||
|
||||
n = copy(p, (*b)[tunOffsetBytes:tunOffsetBytes+n])
|
||||
n = copy(p, b[tunOffsetBytes:tunOffsetBytes+n])
|
||||
return
|
||||
}
|
||||
|
||||
@ -41,8 +41,8 @@ func (d *tunDevice) Write(p []byte) (n int, err error) {
|
||||
b := bufpool.Get(tunOffsetBytes + len(p))
|
||||
defer bufpool.Put(b)
|
||||
|
||||
copy((*b)[tunOffsetBytes:], p)
|
||||
return d.dev.Write(*b, tunOffsetBytes)
|
||||
copy(b[tunOffsetBytes:], p)
|
||||
return d.dev.Write(b, tunOffsetBytes)
|
||||
}
|
||||
|
||||
func (d *tunDevice) Close() error {
|
||||
|
Reference in New Issue
Block a user