From 21e1954745a12948de5ccdea9f6b335fe169a463 Mon Sep 17 00:00:00 2001 From: monkey92t Date: Sat, 28 Jan 2023 15:44:06 +0800 Subject: [PATCH] fix(conn): releaseConn should be executed correctly Signed-off-by: monkey92t --- cluster.go | 20 ++++++++++++++------ redis.go | 11 ++++++++--- 2 files changed, 22 insertions(+), 9 deletions(-) diff --git a/cluster.go b/cluster.go index ffc6536c..12417d1f 100644 --- a/cluster.go +++ b/cluster.go @@ -1287,9 +1287,13 @@ func (c *ClusterClient) processPipelineNode( return err } - err = c.processPipelineNodeConn(ctx, node, cn, cmds, failedCmds) - node.Client.releaseConn(ctx, cn, err) - return err + var processErr error + defer func() { + node.Client.releaseConn(ctx, cn, processErr) + }() + processErr = c.processPipelineNodeConn(ctx, node, cn, cmds, failedCmds) + + return processErr }) } @@ -1464,9 +1468,13 @@ func (c *ClusterClient) processTxPipelineNode( return err } - err = c.processTxPipelineNodeConn(ctx, node, cn, cmds, failedCmds) - node.Client.releaseConn(ctx, cn, err) - return err + var processErr error + defer func() { + node.Client.releaseConn(ctx, cn, processErr) + }() + processErr = c.processTxPipelineNodeConn(ctx, node, cn, cmds, failedCmds) + + return processErr }) } diff --git a/redis.go b/redis.go index ed1a6138..6eed8424 100644 --- a/redis.go +++ b/redis.go @@ -342,9 +342,14 @@ func (c *baseClient) withConn( return err } - err = fn(ctx, cn) - c.releaseConn(ctx, cn, err) - return err + var fnErr error + defer func() { + c.releaseConn(ctx, cn, fnErr) + }() + + fnErr = fn(ctx, cn) + + return fnErr } func (c *baseClient) dial(ctx context.Context, network, addr string) (net.Conn, error) {