summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRajesh Joseph <rjoseph@redhat.com>2016-11-14 15:40:32 +0530
committerNiels de Vos <ndevos@redhat.com>2016-11-22 04:45:34 -0800
commit277008a3a8583ef10cec9e4182960792e56c5c10 (patch)
treeec73bfa5f5582f474bc20c8a183f57db929f81ab
parent7b80a0f02fa0c27f5f5e89e69f92678145fd6a7f (diff)
libglusterfs:Now mempool is added to ctx pool list under a lock
mempool is added to ctx pool list without any lock. This can cause undefined behaviour in case of multithreaded environment. Fix: modify the list only under ctx->lock Change-Id: I7bdbb3db48a899bb0e41427e149b13c0facaedba Signed-off-by: Rajesh Joseph <rjoseph@redhat.com> BUG: 1394719 Reviewed-on: http://review.gluster.org/15842 NetBSD-regression: NetBSD Build System <jenkins@build.gluster.org> Smoke: Gluster Build System <jenkins@build.gluster.org> CentOS-regression: Gluster Build System <jenkins@build.gluster.org> Reviewed-by: Raghavendra Talur <rtalur@redhat.com> Reviewed-by: Shyamsundar Ranganathan <srangana@redhat.com> Reviewed-by: Poornima G <pgurusid@redhat.com> Reviewed-by: Niels de Vos <ndevos@redhat.com>
-rw-r--r--api/src/glfs.c2
-rw-r--r--libglusterfs/src/mem-pool.c6
2 files changed, 5 insertions, 3 deletions
diff --git a/api/src/glfs.c b/api/src/glfs.c
index 8410504059a..418c6c5d285 100644
--- a/api/src/glfs.c
+++ b/api/src/glfs.c
@@ -149,8 +149,6 @@ glusterfs_ctx_defaults_init (glusterfs_ctx_t *ctx)
LOCK_INIT (&pool->lock);
ctx->pool = pool;
- LOCK_INIT (&ctx->lock);
-
ret = 0;
err:
if (ret && pool) {
diff --git a/libglusterfs/src/mem-pool.c b/libglusterfs/src/mem-pool.c
index 78fecec4b0f..88fbdf58319 100644
--- a/libglusterfs/src/mem-pool.c
+++ b/libglusterfs/src/mem-pool.c
@@ -422,7 +422,11 @@ mem_pool_new_fn (unsigned long sizeof_type,
if (!ctx)
goto out;
- list_add (&mem_pool->global_list, &ctx->mempool_list);
+ LOCK (&ctx->lock);
+ {
+ list_add (&mem_pool->global_list, &ctx->mempool_list);
+ }
+ UNLOCK (&ctx->lock);
out:
return mem_pool;