diff options
-rw-r--r-- | api/src/glfs.c | 33 |
1 files changed, 21 insertions, 12 deletions
diff --git a/api/src/glfs.c b/api/src/glfs.c index 0eb25a222de..25eaabb066c 100644 --- a/api/src/glfs.c +++ b/api/src/glfs.c @@ -753,45 +753,54 @@ pub_glfs_new (const char *volname) fs = glfs_new_fs (volname); if (!fs) - return NULL; + goto out; ctx = glusterfs_ctx_new (); if (!ctx) - goto fini; + goto out; /* first globals init, for gf_mem_acct_enable_set () */ ret = glusterfs_globals_init (ctx); if (ret) - goto fini; + goto out; old_THIS = THIS; ret = glfs_init_global_ctx (); if (ret) - goto fini; + goto out; /* then ctx_defaults_init, for xlator_mem_acct_init(THIS) */ ret = glusterfs_ctx_defaults_init (ctx); if (ret) - goto fini; + goto out; fs->ctx = ctx; ret = glfs_set_logging (fs, "/dev/null", 0); if (ret) - goto fini; + goto out; fs->ctx->cmd_args.volfile_id = gf_strdup (volname); - if (!(fs->ctx->cmd_args.volfile_id)) - goto fini; + if (!(fs->ctx->cmd_args.volfile_id)) { + ret = -1; + goto out; + } - goto out; + ret = 0; -fini: - glfs_fini (fs); - fs = NULL; out: + if (ret) { + if (fs) { + glfs_fini (fs); + fs = NULL; + } else { + /* glfs_fini() calls mem_pools_fini() too */ + mem_pools_fini (); + } + } + if (old_THIS) THIS = old_THIS; |