diff options
Diffstat (limited to 'api')
| -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;  | 
