aboutsummaryrefslogtreecommitdiff
path: root/peripconn.go
diff options
context:
space:
mode:
authorGravatar Aliaksandr Valialkin <valyala@gmail.com> 2015-11-10 15:20:13 +0200
committerGravatar Aliaksandr Valialkin <valyala@gmail.com> 2015-11-10 15:20:13 +0200
commit8081e14ca02f24f74b5fac5180a97bec7c12e8ed (patch)
treeeab5156c63b0215084586562dba383b8724ceeea /peripconn.go
parentIncrease server concurrency in timing tests (diff)
downloadfasthttp-8081e14ca02f24f74b5fac5180a97bec7c12e8ed.tar.gz
fasthttp-8081e14ca02f24f74b5fac5180a97bec7c12e8ed.tar.bz2
fasthttp-8081e14ca02f24f74b5fac5180a97bec7c12e8ed.zip
Use perIPConn pool
Diffstat (limited to 'peripconn.go')
-rw-r--r--peripconn.go24
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
}