Explorar el Código

fixed bug with endless go routines

Nick Davies hace 12 años
padre
commit
d919402f69
Se han modificado 1 ficheros con 11 adiciones y 19 borrados
  1. 11 19
      memcache/memcache.go

+ 11 - 19
memcache/memcache.go

@@ -241,25 +241,17 @@ func (c *Client) dial(addr net.Addr) (net.Conn, error) {
 		cn  net.Conn
 		err error
 	}
-	ch := make(chan connError)
-	go func() {
-		nc, err := net.Dial(addr.Network(), addr.String())
-		ch <- connError{nc, err}
-	}()
-	select {
-	case ce := <-ch:
-		return ce.cn, ce.err
-	case <-time.After(c.netTimeout()):
-		// Too slow. Fall through.
-	}
-	// Close the conn if it does end up finally coming in
-	go func() {
-		ce := <-ch
-		if ce.err == nil {
-			ce.cn.Close()
-		}
-	}()
-	return nil, &ConnectTimeoutError{addr}
+
+	nc, err := net.DialTimeout(addr.Network(), addr.String(), c.netTimeout())
+	if err == nil {
+		return nc, nil
+	}
+
+	if err.Error() == "i/o timeout" {
+		return nil, &ConnectTimeoutError{addr}
+	}
+
+	return nil, err
 }
 
 func (c *Client) getConn(addr net.Addr) (*conn, error) {