From c99c72b35fac16e08c4d170b6a46a786caaeef58 Mon Sep 17 00:00:00 2001 From: Poornima G Date: Mon, 16 Mar 2015 15:47:30 +0530 Subject: libgfapi, timer: Fix a crash seen in timer when glfs_fini was invoked. The crash is seen when, glfs_init failed for some reason and glfs_fini was called for cleaning up the partial initialization. The fix is in two folds: 1. In timer store and restore the THIS, previously it was being overwritten. 2. In glfs_free_from_ctx() and glfs_fini() check for NULL before destroying. Change-Id: If40bf69936b873a1da8e348c9d92c66f2f07994b BUG: 1202290 Signed-off-by: Poornima G Reviewed-on: http://review.gluster.org/9895 Reviewed-by: Raghavendra Talur Reviewed-by: Krishnan Parthasarathi Reviewed-by: Raghavendra Bhat Tested-by: Gluster Build System Reviewed-by: Vijay Bellur --- api/src/glfs.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) (limited to 'api/src') diff --git a/api/src/glfs.c b/api/src/glfs.c index 02a8984f450..8bd410c716d 100644 --- a/api/src/glfs.c +++ b/api/src/glfs.c @@ -664,7 +664,9 @@ priv_glfs_free_from_ctx (struct glfs *fs) (void) pthread_mutex_destroy (&fs->mutex); - FREE (fs->volname); + if (fs->volname) + FREE (fs->volname); + FREE (fs); } @@ -934,13 +936,17 @@ pub_glfs_fini (struct glfs *fs) } ctx = fs->ctx; + if (!ctx) { + goto free_fs; + } + + __glfs_entry_fs (fs); + if (ctx->mgmt) { rpc_clnt_disable (ctx->mgmt); ctx->mgmt = NULL; } - __glfs_entry_fs (fs); - call_pool = fs->ctx->pool; while (countdown--) { @@ -1069,6 +1075,7 @@ pub_glfs_fini (struct glfs *fs) if (glusterfs_ctx_destroy (ctx) != 0) ret = -1; +free_fs: glfs_free_from_ctx (fs); fail: -- cgit