summaryrefslogtreecommitdiffstats
path: root/xlators/mgmt/glusterd
diff options
context:
space:
mode:
authorKrishnan Parthasarathi <kparthas@redhat.com>2013-07-11 14:28:41 +0530
committerAnand Avati <avati@redhat.com>2013-07-11 16:09:25 -0700
commit5bb136c4ca18cc4c058040ea6db312be13edb098 (patch)
treeffcb6cc1bd1a22da61656ff9a763390bdd373761 /xlators/mgmt/glusterd
parent6f7d308bf7e07a4202ab091382ccf9cd3c2b309c (diff)
glusterd: Give up biglock before brick's rpc unref
This is to prevent the possibility of a deadlock when rpc_connection_cleanup being called in the same thread as rpc_clnt_unref Change-Id: Ia4dcc0a8a6e6158d4ddec68b780fccbc4cd64adb BUG: 962619 Signed-off-by: Krishnan Parthasarathi <kparthas@redhat.com> Reviewed-on: http://review.gluster.org/5321 Reviewed-by: Amar Tumballi <amarts@redhat.com> Tested-by: Gluster Build System <jenkins@build.gluster.com> Reviewed-by: Anand Avati <avati@redhat.com>
Diffstat (limited to 'xlators/mgmt/glusterd')
-rw-r--r--xlators/mgmt/glusterd/src/glusterd-utils.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/xlators/mgmt/glusterd/src/glusterd-utils.c b/xlators/mgmt/glusterd/src/glusterd-utils.c
index cb91741e322..fea67e77564 100644
--- a/xlators/mgmt/glusterd/src/glusterd-utils.c
+++ b/xlators/mgmt/glusterd/src/glusterd-utils.c
@@ -1353,6 +1353,7 @@ int32_t
glusterd_brick_disconnect (glusterd_brickinfo_t *brickinfo)
{
rpc_clnt_t *rpc = NULL;
+ glusterd_conf_t *priv = THIS->private;
GF_ASSERT (brickinfo);
@@ -1364,8 +1365,11 @@ glusterd_brick_disconnect (glusterd_brickinfo_t *brickinfo)
rpc = brickinfo->rpc;
brickinfo->rpc = NULL;
- if (rpc)
+ if (rpc) {
+ synclock_unlock (&priv->big_lock);
rpc_clnt_unref (rpc);
+ synclock_lock (&priv->big_lock);
+ }
return 0;
}