change []byte bufpool to *[]byte
This commit is contained in:
@ -11,7 +11,8 @@ var (
|
||||
size: 128,
|
||||
pool: sync.Pool{
|
||||
New: func() interface{} {
|
||||
return make([]byte, 128)
|
||||
b := make([]byte, 128)
|
||||
return &b
|
||||
},
|
||||
},
|
||||
},
|
||||
@ -19,7 +20,8 @@ var (
|
||||
size: 512,
|
||||
pool: sync.Pool{
|
||||
New: func() interface{} {
|
||||
return make([]byte, 512)
|
||||
b := make([]byte, 512)
|
||||
return &b
|
||||
},
|
||||
},
|
||||
},
|
||||
@ -27,7 +29,8 @@ var (
|
||||
size: 1024,
|
||||
pool: sync.Pool{
|
||||
New: func() interface{} {
|
||||
return make([]byte, 1024)
|
||||
b := make([]byte, 1024)
|
||||
return &b
|
||||
},
|
||||
},
|
||||
},
|
||||
@ -35,7 +38,8 @@ var (
|
||||
size: 4096,
|
||||
pool: sync.Pool{
|
||||
New: func() interface{} {
|
||||
return make([]byte, 4096)
|
||||
b := make([]byte, 4096)
|
||||
return &b
|
||||
},
|
||||
},
|
||||
},
|
||||
@ -43,7 +47,8 @@ var (
|
||||
size: 8192,
|
||||
pool: sync.Pool{
|
||||
New: func() interface{} {
|
||||
return make([]byte, 8192)
|
||||
b := make([]byte, 8192)
|
||||
return &b
|
||||
},
|
||||
},
|
||||
},
|
||||
@ -51,7 +56,8 @@ var (
|
||||
size: 16 * 1024,
|
||||
pool: sync.Pool{
|
||||
New: func() interface{} {
|
||||
return make([]byte, 16*1024)
|
||||
b := make([]byte, 16*1024)
|
||||
return &b
|
||||
},
|
||||
},
|
||||
},
|
||||
@ -59,7 +65,8 @@ var (
|
||||
size: 32 * 1024,
|
||||
pool: sync.Pool{
|
||||
New: func() interface{} {
|
||||
return make([]byte, 32*1024)
|
||||
b := make([]byte, 32*1024)
|
||||
return &b
|
||||
},
|
||||
},
|
||||
},
|
||||
@ -67,7 +74,8 @@ var (
|
||||
size: 64 * 1024,
|
||||
pool: sync.Pool{
|
||||
New: func() interface{} {
|
||||
return make([]byte, 64*1024)
|
||||
b := make([]byte, 64*1024)
|
||||
return &b
|
||||
},
|
||||
},
|
||||
},
|
||||
@ -75,27 +83,31 @@ var (
|
||||
size: 65 * 1024,
|
||||
pool: sync.Pool{
|
||||
New: func() interface{} {
|
||||
return make([]byte, 65*1024)
|
||||
b := make([]byte, 65*1024)
|
||||
return &b
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
)
|
||||
|
||||
// Get returns a buffer size.
|
||||
func Get(size int) []byte {
|
||||
// Get returns a buffer of specified size.
|
||||
func Get(size int) *[]byte {
|
||||
for i := range pools {
|
||||
if size <= pools[i].size {
|
||||
return pools[i].pool.Get().([]byte)[:size]
|
||||
b := pools[i].pool.Get().(*[]byte)
|
||||
*b = (*b)[:size]
|
||||
return b
|
||||
}
|
||||
}
|
||||
return make([]byte, size)
|
||||
b := make([]byte, size)
|
||||
return &b
|
||||
}
|
||||
|
||||
func Put(b []byte) {
|
||||
func Put(b *[]byte) {
|
||||
for i := range pools {
|
||||
if cap(b) == pools[i].size {
|
||||
pools[i].pool.Put(b[:cap(b)])
|
||||
if cap(*b) == pools[i].size {
|
||||
pools[i].pool.Put(b)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -110,7 +110,7 @@ func (c *udpConn) ReadFrom(b []byte) (n int, addr net.Addr, err error) {
|
||||
rbuf := bufpool.Get(c.bufferSize)
|
||||
defer bufpool.Put(rbuf)
|
||||
|
||||
n, c.raddr, err = c.PacketConn.ReadFrom(rbuf)
|
||||
n, c.raddr, err = c.PacketConn.ReadFrom(*rbuf)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
@ -119,11 +119,11 @@ func (c *udpConn) ReadFrom(b []byte) (n int, addr net.Addr, err error) {
|
||||
header := gosocks5.UDPHeader{
|
||||
Addr: &socksAddr,
|
||||
}
|
||||
hlen, err := header.ReadFrom(bytes.NewReader(rbuf[:n]))
|
||||
hlen, err := header.ReadFrom(bytes.NewReader((*rbuf)[:n]))
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
n = copy(b, rbuf[hlen:n])
|
||||
n = copy(b, (*rbuf)[hlen:n])
|
||||
|
||||
addr, err = net.ResolveUDPAddr("udp", socksAddr.String())
|
||||
return
|
||||
@ -151,7 +151,7 @@ func (c *udpConn) WriteTo(b []byte, addr net.Addr) (n int, err error) {
|
||||
Data: b,
|
||||
}
|
||||
|
||||
buf := bytes.NewBuffer(wbuf[:0])
|
||||
buf := bytes.NewBuffer((*wbuf)[:0])
|
||||
_, err = dgram.WriteTo(buf)
|
||||
if err != nil {
|
||||
return
|
||||
|
@ -45,18 +45,18 @@ func (c *UDPConn) ReadFrom(b []byte) (n int, addr net.Addr, err error) {
|
||||
rbuf := bufpool.Get(c.bufferSize)
|
||||
defer bufpool.Put(rbuf)
|
||||
|
||||
n, _, err = c.PacketConn.ReadFrom(rbuf)
|
||||
n, _, err = c.PacketConn.ReadFrom(*rbuf)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
saddr := gosocks5.Addr{}
|
||||
addrLen, err := saddr.ReadFrom(bytes.NewReader(rbuf[:n]))
|
||||
addrLen, err := saddr.ReadFrom(bytes.NewReader((*rbuf)[:n]))
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
n = copy(b, rbuf[addrLen:n])
|
||||
n = copy(b, (*rbuf)[addrLen:n])
|
||||
addr, err = net.ResolveUDPAddr("udp", saddr.String())
|
||||
|
||||
return
|
||||
@ -76,13 +76,13 @@ func (c *UDPConn) WriteTo(b []byte, addr net.Addr) (n int, err error) {
|
||||
return
|
||||
}
|
||||
|
||||
addrLen, err := socksAddr.Encode(wbuf)
|
||||
addrLen, err := socksAddr.Encode(*wbuf)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
n = copy(wbuf[addrLen:], b)
|
||||
_, err = c.PacketConn.WriteTo(wbuf[:addrLen+n], c.raddr)
|
||||
n = copy((*wbuf)[addrLen:], b)
|
||||
_, err = c.PacketConn.WriteTo((*wbuf)[:addrLen+n], c.raddr)
|
||||
|
||||
return
|
||||
}
|
||||
|
@ -35,7 +35,7 @@ func (c *Conn) ReadFrom(b []byte) (n int, addr net.Addr, err error) {
|
||||
case bb := <-c.rc:
|
||||
n = copy(b, bb)
|
||||
c.SetIdle(false)
|
||||
bufpool.Put(bb)
|
||||
bufpool.Put(&bb)
|
||||
|
||||
case <-c.closed:
|
||||
err = net.ErrClosed
|
||||
|
@ -56,7 +56,7 @@ func (ln *listener) listenLoop() {
|
||||
|
||||
b := bufpool.Get(ln.readBufferSize)
|
||||
|
||||
n, raddr, err := ln.conn.ReadFrom(b)
|
||||
n, raddr, err := ln.conn.ReadFrom(*b)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
@ -67,7 +67,7 @@ func (ln *listener) listenLoop() {
|
||||
continue
|
||||
}
|
||||
|
||||
if err := c.WriteQueue(b[:n]); err != nil {
|
||||
if err := c.WriteQueue((*b)[:n]); err != nil {
|
||||
ln.logger.Warn("data discarded: ", err)
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user