diff options
| author | Mohit Agrawal <moagrawal@redhat.com> | 2019-01-02 16:25:35 +0530 | 
|---|---|---|
| committer | Amar Tumballi <amarts@redhat.com> | 2019-01-11 06:02:52 +0000 | 
| commit | 1e28c54c5ec8d84ec8a22493161314010992918e (patch) | |
| tree | 9c94618a500e7c841b4f69c4c559834cc61a9c41 /xlators/storage/posix/src/posix-helpers.c | |
| parent | fa7ae128706062afefcb0a3117527b8bef21f396 (diff) | |
core: brick process is crashed at the time of spawn thread
Problem: brick is getting crashed at the time of calling
         pthread_detach after just call gf_thread_create.If
         sufficient resources are not available on the system
         pthread_create returns EAGAIN (non-negative) but the
         caller function expects negative error code in case of failure
Solution: Change the condition in caller function to avoid the crash
Change-Id: Ifeaa49f809957eb6c33aa9792f5af1b55566756d
fixes: bz#1662906
Diffstat (limited to 'xlators/storage/posix/src/posix-helpers.c')
| -rw-r--r-- | xlators/storage/posix/src/posix-helpers.c | 15 | 
1 files changed, 9 insertions, 6 deletions
diff --git a/xlators/storage/posix/src/posix-helpers.c b/xlators/storage/posix/src/posix-helpers.c index 874b0a0171b..193afc5f3fa 100644 --- a/xlators/storage/posix/src/posix-helpers.c +++ b/xlators/storage/posix/src/posix-helpers.c @@ -1597,7 +1597,7 @@ posix_ctx_janitor_thread_proc(void *data)      return NULL;  } -void +int  posix_spawn_ctx_janitor_thread(xlator_t *this)  {      struct posix_private *priv = NULL; @@ -1618,7 +1618,7 @@ posix_spawn_ctx_janitor_thread(xlator_t *this)                                     posix_ctx_janitor_thread_proc, this,                                     "posixctxjan"); -            if (ret < 0) { +            if (ret) {                  gf_msg(this->name, GF_LOG_ERROR, errno, P_MSG_THREAD_FAILED,                         "spawning janitor "                         "thread failed"); @@ -1628,6 +1628,7 @@ posix_spawn_ctx_janitor_thread(xlator_t *this)      }  unlock:      UNLOCK(&priv->lock); +    return ret;  }  static int @@ -2193,7 +2194,7 @@ abort:      return NULL;  } -void +int  posix_spawn_health_check_thread(xlator_t *xl)  {      struct posix_private *priv = NULL; @@ -2215,7 +2216,7 @@ posix_spawn_health_check_thread(xlator_t *xl)          ret = gf_thread_create(&priv->health_check, NULL,                                 posix_health_check_thread_proc, xl, "posixhc"); -        if (ret < 0) { +        if (ret) {              priv->health_check_interval = 0;              priv->health_check_active = _gf_false;              gf_msg(xl->name, GF_LOG_ERROR, errno, P_MSG_HEALTHCHECK_FAILED, @@ -2227,6 +2228,7 @@ posix_spawn_health_check_thread(xlator_t *xl)      }  unlock:      UNLOCK(&priv->lock); +    return ret;  }  void @@ -2309,7 +2311,7 @@ out:      return NULL;  } -void +int  posix_spawn_disk_space_check_thread(xlator_t *xl)  {      struct posix_private *priv = NULL; @@ -2328,7 +2330,7 @@ posix_spawn_disk_space_check_thread(xlator_t *xl)          ret = gf_thread_create(&priv->disk_space_check, NULL,                                 posix_disk_space_check_thread_proc, xl,                                 "posix_reserve"); -        if (ret < 0) { +        if (ret) {              priv->disk_space_check_active = _gf_false;              gf_msg(xl->name, GF_LOG_ERROR, errno, P_MSG_DISK_SPACE_CHECK_FAILED,                     "unable to setup disk space check thread"); @@ -2339,6 +2341,7 @@ posix_spawn_disk_space_check_thread(xlator_t *xl)      }  unlock:      UNLOCK(&priv->lock); +    return ret;  }  int  | 
