3604df
From 31d0ef0a4fc9d8028f45c9306df0430a0767a33f Mon Sep 17 00:00:00 2001
3604df
From: Rajesh Joseph <rjoseph@redhat.com>
3604df
Date: Mon, 14 Nov 2016 15:40:32 +0530
3604df
Subject: [PATCH 189/206] libglusterfs:Now mempool is added to ctx pool list
3604df
 under a lock
3604df
3604df
mempool is added to ctx pool list without any lock. This can cause undefined
3604df
behaviour in case of multithreaded environment.
3604df
3604df
Fix: modify the list only under ctx->lock
3604df
3604df
> Reviewed-on: http://review.gluster.org/15842
3604df
> NetBSD-regression: NetBSD Build System <jenkins@build.gluster.org>
3604df
> Smoke: Gluster Build System <jenkins@build.gluster.org>
3604df
> CentOS-regression: Gluster Build System <jenkins@build.gluster.org>
3604df
> Reviewed-by: Raghavendra Talur <rtalur@redhat.com>
3604df
> Reviewed-by: Shyamsundar Ranganathan <srangana@redhat.com>
3604df
> Reviewed-by: Poornima G <pgurusid@redhat.com>
3604df
> Reviewed-by: Niels de Vos <ndevos@redhat.com>
3604df
3604df
Change-Id: I7bdbb3db48a899bb0e41427e149b13c0facaedba
3604df
Signed-off-by: Rajesh Joseph <rjoseph@redhat.com>
3604df
BUG: 1387558
3604df
Reviewed-on: https://code.engineering.redhat.com/gerrit/90965
3604df
Reviewed-by: Atin Mukherjee <amukherj@redhat.com>
3604df
---
3604df
 api/src/glfs.c              | 2 --
3604df
 libglusterfs/src/mem-pool.c | 6 +++++-
3604df
 2 files changed, 5 insertions(+), 3 deletions(-)
3604df
3604df
diff --git a/api/src/glfs.c b/api/src/glfs.c
3604df
index ef713f9..307e22c 100644
3604df
--- a/api/src/glfs.c
3604df
+++ b/api/src/glfs.c
3604df
@@ -149,8 +149,6 @@ glusterfs_ctx_defaults_init (glusterfs_ctx_t *ctx)
3604df
 	LOCK_INIT (&pool->lock);
3604df
 	ctx->pool = pool;
3604df
 
3604df
-	LOCK_INIT (&ctx->lock);
3604df
-
3604df
 	ret = 0;
3604df
 err:
3604df
 	if (ret && pool) {
3604df
diff --git a/libglusterfs/src/mem-pool.c b/libglusterfs/src/mem-pool.c
3604df
index 78fecec..88fbdf5 100644
3604df
--- a/libglusterfs/src/mem-pool.c
3604df
+++ b/libglusterfs/src/mem-pool.c
3604df
@@ -422,7 +422,11 @@ mem_pool_new_fn (unsigned long sizeof_type,
3604df
         if (!ctx)
3604df
                 goto out;
3604df
 
3604df
-        list_add (&mem_pool->global_list, &ctx->mempool_list);
3604df
+        LOCK (&ctx->lock);
3604df
+        {
3604df
+                list_add (&mem_pool->global_list, &ctx->mempool_list);
3604df
+        }
3604df
+        UNLOCK (&ctx->lock);
3604df
 
3604df
 out:
3604df
         return mem_pool;
3604df
-- 
3604df
2.9.3
3604df