فهرست منبع

When closing a cluster rmeove its connections instead of closing them

Chris Bannister 11 سال پیش
والد
کامیت
daf8c8f8a6
1فایلهای تغییر یافته به همراه9 افزوده شده و 4 حذف شده
  1. 9 4
      cluster.go

+ 9 - 4
cluster.go

@@ -182,9 +182,8 @@ func (c *clusterImpl) addConn(conn *Conn, keyspace string) {
 	c.conns[conn] = struct{}{}
 }
 
-func (c *clusterImpl) removeConn(conn *Conn) {
-	c.mu.Lock()
-	defer c.mu.Unlock()
+// Should only be called if c.mu is locked
+func (c *clusterImpl) removeConnLocked(conn *Conn) {
 	conn.Close()
 	connPool := c.connPool[conn.addr]
 	if connPool == nil {
@@ -198,6 +197,12 @@ func (c *clusterImpl) removeConn(conn *Conn) {
 	delete(c.conns, conn)
 }
 
+func (c *clusterImpl) removeConn(conn *Conn) {
+	c.mu.Lock()
+	defer c.mu.Unlock()
+	c.removeConnLocked(conn)
+}
+
 func (c *clusterImpl) HandleError(conn *Conn, err error, closed bool) {
 	if !closed {
 		// ignore all non-fatal errors
@@ -242,7 +247,7 @@ func (c *clusterImpl) Close() {
 		c.quit = true
 		close(c.quitWait)
 		for conn := range c.conns {
-			conn.Close()
+			c.removeConnLocked(conn)
 		}
 	})
 }