diff options
| author | Mohit Agrawal <moagrawa@redhat.com> | 2018-02-10 12:25:15 +0530 | 
|---|---|---|
| committer | Amar Tumballi <amarts@redhat.com> | 2018-02-27 07:11:15 +0000 | 
| commit | 7c3cc485054e4ede1efb358552135b432fb7047a (patch) | |
| tree | 5657500860f795b7c895bce14069545d8ba463e2 /xlators/features/upcall/src | |
| parent | 430bff7dc330eec9447423e95f2cae49744a79c3 (diff) | |
glusterfsd: Memleak in glusterfsd process while  brick mux is on
Problem: At the time of stopping the volume while brick multiplex is
         enabled memory is not cleanup from all server side xlators.
Solution: To cleanup memory for all server side xlators call fini
          in glusterfs_handle_terminate after send GF_EVENT_CLEANUP
          notification to top xlator.
BUG: 1544090
Signed-off-by: Mohit Agrawal <moagrawa@redhat.com>
Note: Run all test-cases in separate build (https://review.gluster.org/19574)
      with same patch after enable brick mux forcefully, all test cases are
      passed.
Change-Id: Ia10dc7f2605aa50f2b90b3fe4eb380ba9299e2fc
Diffstat (limited to 'xlators/features/upcall/src')
| -rw-r--r-- | xlators/features/upcall/src/upcall.c | 18 | 
1 files changed, 16 insertions, 2 deletions
diff --git a/xlators/features/upcall/src/upcall.c b/xlators/features/upcall/src/upcall.c index b9b4bc9d725..7e1185a417f 100644 --- a/xlators/features/upcall/src/upcall.c +++ b/xlators/features/upcall/src/upcall.c @@ -2446,8 +2446,11 @@ fini (xlator_t *this)          priv->fini = 1; -        if (priv->reaper_init_done) -                pthread_join (priv->reaper_thr, NULL); +        if (priv->reaper_thr) { +                gf_thread_cleanup_xint (priv->reaper_thr); +                priv->reaper_thr = 0; +                priv->reaper_init_done = _gf_false; +        }          dict_unref (priv->xattrs);          LOCK_DESTROY (&priv->inode_ctx_lk); @@ -2457,13 +2460,24 @@ fini (xlator_t *this)           * before calling xlator_fini */          GF_FREE (priv); +        if (this->local_pool) { +                mem_pool_destroy (this->local_pool); +                this->local_pool = NULL; +        } +          return 0;  }  int  upcall_forget (xlator_t *this, inode_t *inode)  { +        upcall_private_t *priv          = this->private; + +        if (!priv) +                goto out; +          upcall_cleanup_inode_ctx (this, inode); +out:          return 0;  }  | 
