Преглед изворни кода

Merge pull request #13 from asim/master

Fix connection leak. Use net.Addr.String() as freeconn map key.
Brad Fitzpatrick пре 12 година
родитељ
комит
e952ca00c1
1 измењених фајлова са 6 додато и 6 уклоњено
  1. 6 6
      memcache/memcache.go

+ 6 - 6
memcache/memcache.go

@@ -133,7 +133,7 @@ type Client struct {
 	selector ServerSelector
 
 	lk       sync.Mutex
-	freeconn map[net.Addr][]*conn
+	freeconn map[string][]*conn
 }
 
 // Item is an item to be got or stored in a memcached server.
@@ -193,14 +193,14 @@ func (c *Client) putFreeConn(addr net.Addr, cn *conn) {
 	c.lk.Lock()
 	defer c.lk.Unlock()
 	if c.freeconn == nil {
-		c.freeconn = make(map[net.Addr][]*conn)
+		c.freeconn = make(map[string][]*conn)
 	}
-	freelist := c.freeconn[addr]
+	freelist := c.freeconn[addr.String()]
 	if len(freelist) >= maxIdleConnsPerAddr {
 		cn.nc.Close()
 		return
 	}
-	c.freeconn[addr] = append(freelist, cn)
+	c.freeconn[addr.String()] = append(freelist, cn)
 }
 
 func (c *Client) getFreeConn(addr net.Addr) (cn *conn, ok bool) {
@@ -209,12 +209,12 @@ func (c *Client) getFreeConn(addr net.Addr) (cn *conn, ok bool) {
 	if c.freeconn == nil {
 		return nil, false
 	}
-	freelist, ok := c.freeconn[addr]
+	freelist, ok := c.freeconn[addr.String()]
 	if !ok || len(freelist) == 0 {
 		return nil, false
 	}
 	cn = freelist[len(freelist)-1]
-	c.freeconn[addr] = freelist[:len(freelist)-1]
+	c.freeconn[addr.String()] = freelist[:len(freelist)-1]
 	return cn, true
 }