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/storage/posix | |
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/storage/posix')
-rw-r--r-- | xlators/storage/posix/src/posix-common.c | 47 | ||||
-rw-r--r-- | xlators/storage/posix/src/posix-helpers.c | 1 |
2 files changed, 20 insertions, 28 deletions
diff --git a/xlators/storage/posix/src/posix-common.c b/xlators/storage/posix/src/posix-common.c index fa2655ed8c0..a67b3d7dc70 100644 --- a/xlators/storage/posix/src/posix-common.c +++ b/xlators/storage/posix/src/posix-common.c @@ -105,6 +105,7 @@ extern char *marker_xattrs[]; (lutimes (path, tv)) #endif + int32_t posix_priv (xlator_t *this) { @@ -147,9 +148,6 @@ posix_notify (xlator_t *this, void *data, ...) { - struct posix_private *priv = NULL; - - priv = this->private; switch (event) { case GF_EVENT_PARENT_UP: @@ -158,31 +156,6 @@ posix_notify (xlator_t *this, default_notify (this, GF_EVENT_CHILD_UP, data); } break; - case GF_EVENT_CLEANUP: - if (priv->health_check) { - priv->health_check_active = _gf_false; - pthread_cancel (priv->health_check); - priv->health_check = 0; - } - if (priv->disk_space_check) { - priv->disk_space_check_active = _gf_false; - pthread_cancel (priv->disk_space_check); - priv->disk_space_check = 0; - } - if (priv->janitor) { - (void) gf_thread_cleanup_xint (priv->janitor); - priv->janitor = 0; - } - if (priv->fsyncer) { - (void) gf_thread_cleanup_xint (priv->fsyncer); - priv->fsyncer = 0; - } - if (priv->mount_lock) { - (void) sys_closedir (priv->mount_lock); - priv->mount_lock = NULL; - } - - break; default: /* */ break; @@ -1127,6 +1100,24 @@ posix_fini (xlator_t *this) if (!priv) return; this->private = NULL; + if (priv->health_check) { + priv->health_check_active = _gf_false; + pthread_cancel (priv->health_check); + priv->health_check = 0; + } + if (priv->disk_space_check) { + priv->disk_space_check_active = _gf_false; + pthread_cancel (priv->disk_space_check); + priv->disk_space_check = 0; + } + if (priv->janitor) { + (void) gf_thread_cleanup_xint (priv->janitor); + priv->janitor = 0; + } + if (priv->fsyncer) { + (void) gf_thread_cleanup_xint (priv->fsyncer); + priv->fsyncer = 0; + } /*unlock brick dir*/ if (priv->mount_lock) (void) sys_closedir (priv->mount_lock); diff --git a/xlators/storage/posix/src/posix-helpers.c b/xlators/storage/posix/src/posix-helpers.c index 56c9b4afe94..377389d22a3 100644 --- a/xlators/storage/posix/src/posix-helpers.c +++ b/xlators/storage/posix/src/posix-helpers.c @@ -2060,6 +2060,7 @@ abort: gf_log (THIS->name, GF_LOG_INFO, "detaching not-only " " child %s", priv->base_path); top->notify (top, GF_EVENT_CLEANUP, victim); + xlator_mem_cleanup (victim); } } |