diff options
author | Aliaksandr Valialkin <valyala@gmail.com> | 2015-11-10 15:20:13 +0200 |
---|---|---|
committer | Aliaksandr Valialkin <valyala@gmail.com> | 2015-11-10 15:20:13 +0200 |
commit | 8081e14ca02f24f74b5fac5180a97bec7c12e8ed (patch) | |
tree | eab5156c63b0215084586562dba383b8724ceeea /peripconn.go | |
parent | Increase server concurrency in timing tests (diff) | |
download | fasthttp-8081e14ca02f24f74b5fac5180a97bec7c12e8ed.tar.gz fasthttp-8081e14ca02f24f74b5fac5180a97bec7c12e8ed.tar.bz2 fasthttp-8081e14ca02f24f74b5fac5180a97bec7c12e8ed.zip |
Use perIPConn pool
Diffstat (limited to 'peripconn.go')
-rw-r--r-- | peripconn.go | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/peripconn.go b/peripconn.go index cf8e986..2ebe0d4 100644 --- a/peripconn.go +++ b/peripconn.go @@ -42,11 +42,35 @@ type perIPConn struct { ip uint32 perIPConnCounter *perIPConnCounter + + v interface{} +} + +func acquirePerIPConn(conn net.Conn, ip uint32, counter *perIPConnCounter) *perIPConn { + v := perIPConnPool.Get() + if v == nil { + v = &perIPConn{} + } + c := v.(*perIPConn) + c.Conn = conn + c.ip = ip + c.perIPConnCounter = counter + c.v = v + return c } +func releasePerIPConn(c *perIPConn) { + c.Conn = nil + c.perIPConnCounter = nil + perIPConnPool.Put(c.v) +} + +var perIPConnPool sync.Pool + func (c *perIPConn) Close() error { err := c.Conn.Close() c.perIPConnCounter.Unregister(c.ip) + releasePerIPConn(c) return err } |