diff options
| author | Mohit Agrawal <moagrawal@redhat.com> | 2020-03-04 09:17:26 +0530 | 
|---|---|---|
| committer | Mohit Agrawal <moagrawal@redhat.com> | 2020-03-27 20:49:20 +0530 | 
| commit | e589d8de66d3325da8fbbbe44d1a5bd6335e08ab (patch) | |
| tree | 3d4c2379e9009e86550564419c9491454f993c18 /xlators/protocol/server/src/server.c | |
| parent | cc43ac8651de9aa508b01cb259b43c02d89b2afc (diff) | |
core[brick_mux]: brick crashed when creating and deleting volumes over time
Problem: In brick_mux environment, while volumes are created/stopped in a loop
         after running a long time the main brick is crashed.The brick is crashed
         because the main brick process was not cleaned up memory for all objects
         at the time of detaching a volume.
         Below are the objects that are missed at the time of detaching a volume
         1) xlator object for a brick graph
         2) local_pool for posix_lock xlator
         3) rpc object cleanup at quota xlator
         4) inode leak at brick xlator
Solution: To avoid the crash resolve all leak at the time of detaching a brick
Change-Id: Ibb6e46c5fba22b9441a88cbaf6b3278823235913
updates: #977
Signed-off-by: Mohit Agrawal <moagrawa@redhat.com>
Diffstat (limited to 'xlators/protocol/server/src/server.c')
| -rw-r--r-- | xlators/protocol/server/src/server.c | 12 | 
1 files changed, 9 insertions, 3 deletions
diff --git a/xlators/protocol/server/src/server.c b/xlators/protocol/server/src/server.c index d5775c6ff4b..5b76b49cc82 100644 --- a/xlators/protocol/server/src/server.c +++ b/xlators/protocol/server/src/server.c @@ -403,7 +403,13 @@ server_call_xlator_mem_cleanup(xlator_t *this, char *victim_name)      arg = calloc(1, sizeof(*arg));      arg->this = this; -    arg->victim_name = gf_strdup(victim_name); +    arg->victim_name = strdup(victim_name); +    if (!arg->victim_name) { +        gf_smsg(this->name, GF_LOG_CRITICAL, ENOMEM, LG_MSG_NO_MEMORY, +                "Memory allocation is failed"); +        return; +    } +      th_ret = gf_thread_create_detached(&th_id, server_graph_janitor_threads,                                         arg, "graphjanitor");      if (th_ret) { @@ -411,7 +417,7 @@ server_call_xlator_mem_cleanup(xlator_t *this, char *victim_name)                 "graph janitor Thread"                 " creation is failed for brick %s",                 victim_name); -        GF_FREE(arg->victim_name); +        free(arg->victim_name);          free(arg);      }  } @@ -621,7 +627,7 @@ server_graph_janitor_threads(void *data)      }  out: -    GF_FREE(arg->victim_name); +    free(arg->victim_name);      free(arg);      return NULL;  }  | 
