From 261f845ab8997c91ba51eb8b1ac94664989e38f0 Mon Sep 17 00:00:00 2001 From: Rajesh Joseph Date: Mon, 14 Nov 2016 15:40:32 +0530 Subject: 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 > Reviewed-on: http://review.gluster.org/15842 > NetBSD-regression: NetBSD Build System > Smoke: Gluster Build System > CentOS-regression: Gluster Build System > Reviewed-by: Raghavendra Talur > Reviewed-by: Shyamsundar Ranganathan > Reviewed-by: Poornima G > Reviewed-by: Niels de Vos (cherry picked from commit 277008a3a8583ef10cec9e4182960792e56c5c10) Change-Id: I7bdbb3db48a899bb0e41427e149b13c0facaedba Signed-off-by: Rajesh Joseph BUG: 1397662 Reviewed-on: http://review.gluster.org/15910 NetBSD-regression: NetBSD Build System CentOS-regression: Gluster Build System Smoke: Gluster Build System Reviewed-by: Poornima G Reviewed-by: Niels de Vos --- api/src/glfs.c | 2 -- libglusterfs/src/mem-pool.c | 6 +++++- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/api/src/glfs.c b/api/src/glfs.c index 9a92fa97c3d..4f742b2847c 100644 --- a/api/src/glfs.c +++ b/api/src/glfs.c @@ -155,8 +155,6 @@ glusterfs_ctx_defaults_init (glusterfs_ctx_t *ctx) LOCK_INIT (&pool->lock); ctx->pool = pool; - pthread_mutex_init (&(ctx->lock), NULL); - ret = 0; err: if (ret && pool) { diff --git a/libglusterfs/src/mem-pool.c b/libglusterfs/src/mem-pool.c index 7674913bbdc..91e663c1617 100644 --- a/libglusterfs/src/mem-pool.c +++ b/libglusterfs/src/mem-pool.c @@ -421,7 +421,11 @@ mem_pool_new_fn (unsigned long sizeof_type, if (!ctx) goto out; - list_add (&mem_pool->global_list, &ctx->mempool_list); + pthread_mutex_lock (&ctx->lock); + { + list_add (&mem_pool->global_list, &ctx->mempool_list); + } + pthread_mutex_unlock (&ctx->lock); out: return mem_pool; -- cgit