diff options
| author | Mohit Agrawal <moagrawa@redhat.com> | 2018-02-10 12:25:15 +0530 | 
|---|---|---|
| committer | Jeff Darcy <jeff@pl.atyp.us> | 2018-02-15 17:03:20 +0000 | 
| commit | b313d97faa766443a7f8128b6e19f3d2f1b267dd (patch) | |
| tree | 6af84081aee75fa08c8ceecde4c15a2791863e52 /xlators/features/bit-rot/src/stub/bit-rot-stub.c | |
| parent | 9d0d1fdd091d754149242fd4389b964695aacf13 (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
Change-Id: Ifa1525e25b697371276158705026b421b4f81140
Signed-off-by: Mohit Agrawal <moagrawa@redhat.com>
Diffstat (limited to 'xlators/features/bit-rot/src/stub/bit-rot-stub.c')
| -rw-r--r-- | xlators/features/bit-rot/src/stub/bit-rot-stub.c | 22 | 
1 files changed, 9 insertions, 13 deletions
diff --git a/xlators/features/bit-rot/src/stub/bit-rot-stub.c b/xlators/features/bit-rot/src/stub/bit-rot-stub.c index 76a4c3f6962..830357070d6 100644 --- a/xlators/features/bit-rot/src/stub/bit-rot-stub.c +++ b/xlators/features/bit-rot/src/stub/bit-rot-stub.c @@ -229,18 +229,6 @@ notify (xlator_t *this, int event, void *data, ...)          if (!priv)                  return 0; -        switch (event) { -        case GF_EVENT_CLEANUP: -                if (priv->signth) { -                        (void) gf_thread_cleanup_xint (priv->signth); -                        priv->signth = 0; -                } -                if (priv->container.thread) { -                        (void) gf_thread_cleanup_xint (priv->container.thread); -                        priv->container.thread = 0; -                } -                break; -        }          default_notify (this, event, data);          return 0;  } @@ -263,6 +251,7 @@ fini (xlator_t *this)                          "Could not cancel sign serializer thread");                  goto out;          } +        priv->signth = 0;          while (!list_empty (&priv->squeue)) {                  sigstub = list_first_entry (&priv->squeue, @@ -284,12 +273,19 @@ fini (xlator_t *this)                  goto out;          } +        priv->container.thread = 0; +          while (!list_empty (&priv->container.bad_queue)) {                  stub = list_first_entry (&priv->container.bad_queue, call_stub_t,                                           list);                  list_del_init (&stub->list);                  call_stub_destroy (stub); -        }; +        } + +        if (priv->local_pool) { +                mem_pool_destroy (priv->local_pool); +                priv->local_pool = NULL; +        }          pthread_mutex_destroy (&priv->container.bad_lock);          pthread_cond_destroy (&priv->container.bad_cond);  | 
