summaryrefslogtreecommitdiffstats
path: root/api/src
diff options
context:
space:
mode:
authorNiels de Vos <ndevos@redhat.com>2017-07-14 18:35:10 +0200
committergluster-ant <bugzilla-bot@gluster.org>2017-07-14 18:35:10 +0200
commit936fdb8fb4b8a558c8104fac854fefe5cd64c87d (patch)
treeb1bce7e36a61ce11a0bb7824d0bc5ac299f25911 /api/src
parent74be2339103bc85cb76193308805afac365db36d (diff)
mem-pool: initialize pthread_key_t pool_key in mem_pool_init_early()
It is not possible to call pthread_key_delete for the pool_key that is intialized in the constructor for the memory pools. This makes it difficult to do a full cleanup of all the resources in mem_pools_fini(). For this, the initialization of pool_key should be moved to mem_pool_init(). However, the glusterfsd binary has a rather complex initialization procedure. The memory pools need to get initialized partially to get mem_get() functionality working. But, the pool_sweeper thread can get killed in case it is started before glusterfsd deamonizes. In order to solve this, mem_pools_init() is split into two pieces: 1. mem_pools_init_early() for initializing the basic structures 2. mem_pools_init_late() to start the pool_sweeper thread With the split of mem_pools_init(), and placing the pthread_key_create() in mem_pools_init_early(), it is now possible to correctly cleanup the pool_key with pthread_key_delete() in mem_pools_fini(). It seems that there was no memory pool initialization in the CLI. This has been added as well now. Without it, the CLI will not be able to call mem_get() successfully which results in a hang of the process. Change-Id: I1de0153dfe600fd79eac7468cc070e4bd35e71dd BUG: 1470170 Signed-off-by: Niels de Vos <ndevos@redhat.com> Reviewed-on: https://review.gluster.org/17779 Smoke: Gluster Build System <jenkins@build.gluster.org> CentOS-regression: Gluster Build System <jenkins@build.gluster.org> Reviewed-by: Jeff Darcy <jeff@pl.atyp.us>
Diffstat (limited to 'api/src')
-rw-r--r--api/src/glfs.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/api/src/glfs.c b/api/src/glfs.c
index 9e8e8d7640..6d03aaa9b6 100644
--- a/api/src/glfs.c
+++ b/api/src/glfs.c
@@ -749,7 +749,8 @@ pub_glfs_new (const char *volname)
* Do this as soon as possible in case something else depends on
* pool allocations.
*/
- mem_pools_init ();
+ mem_pools_init_early ();
+ mem_pools_init_late ();
fs = glfs_new_fs (volname);
if (!fs)