Explorar o código

use SetDeadline

Brad Fitzpatrick %!s(int64=14) %!d(string=hai) anos
pai
achega
345e5c6ad1
Modificáronse 2 ficheiros con 10 adicións e 4 borrados
  1. 9 3
      memcache/memcache.go
  2. 1 1
      memcache/memcache_test.go

+ 9 - 3
memcache/memcache.go

@@ -172,6 +172,10 @@ func (cn *conn) release() {
 	cn.c.putFreeConn(cn.addr, cn)
 }
 
+func (cn *conn) extendDeadline() {
+	cn.nc.SetDeadline(time.Now().Add(cn.c.netTimeout()))
+}
+
 // condRelease releases this connection if the error pointed to by err
 // is is nil (not an error) or is only a protocol level error (e.g. a
 // cache miss).  The purpose is to not recycle TCP connections that
@@ -258,19 +262,21 @@ func (c *Client) dial(addr net.Addr) (net.Conn, error) {
 func (c *Client) getConn(addr net.Addr) (*conn, error) {
 	cn, ok := c.getFreeConn(addr)
 	if ok {
+		cn.extendDeadline()
 		return cn, nil
 	}
 	nc, err := c.dial(addr)
 	if err != nil {
 		return nil, err
 	}
-	nc.SetTimeout(int64(c.netTimeout()))
-	return &conn{
+	cn = &conn{
 		nc:   nc,
 		addr: addr,
 		rw:   bufio.NewReadWriter(bufio.NewReader(nc), bufio.NewWriter(nc)),
 		c:    c,
-	}, nil
+	}
+	cn.extendDeadline()
+	return cn, nil
 }
 
 func (c *Client) onItem(item *Item, fn func(*Client, *bufio.ReadWriter, *Item) error) error {

+ 1 - 1
memcache/memcache_test.go

@@ -63,7 +63,7 @@ func TestUnixSocket(t *testing.T) {
 		if _, err := os.Stat(sock); err == nil {
 			break
 		}
-		time.Sleep(25e6 * int64(i))
+		time.Sleep(time.Duration(25 * i) * time.Millisecond)
 	}
 
 	testWithClient(t, New(sock))