diff options
author | N Balachandran <nbalacha@redhat.com> | 2016-07-22 10:28:14 +0530 |
---|---|---|
committer | Raghavendra G <rgowdapp@redhat.com> | 2016-07-22 05:47:11 -0700 |
commit | 96befcf40767cb4ff67868af46637acfabe40bc7 (patch) | |
tree | b99c178b0a2f7bfb97cbbff5ac10f78af36ede1f | |
parent | e8a253188f4f8cc5601f4c6b66d706d6ff720f97 (diff) |
rpc/socket: pthread resources are not cleaned up
A socket_connect failure creates a new pthread which
is not a detached thread. As no pthread_join is called,
the thread resources are not cleaned up causing a memory leak.
Now, socket_connect creates a detached thread to handle failure.
> Change-Id: Idbf25d312f91464ae20c97d501b628bfdec7cf0c
> BUG: 1343374
> Signed-off-by: N Balachandran <nbalacha@redhat.com>
> Reviewed-on: http://review.gluster.org/14875
> Smoke: Gluster Build System <jenkins@build.gluster.org>
> Reviewed-by: Atin Mukherjee <amukherj@redhat.com>
> NetBSD-regression: NetBSD Build System <jenkins@build.gluster.org>
> CentOS-regression: Gluster Build System <jenkins@build.gluster.org>
> Reviewed-by: Jeff Darcy <jdarcy@redhat.com>
(cherry picked from commit 9886d568a7a8839bf3acc81cb1111fa372ac5270)
Change-Id: I69ef46013c8dbc70cbda2695f12be1f6d3720055
BUG: 1354250
Signed-off-by: N Balachandran <nbalacha@redhat.com>
Reviewed-on: http://review.gluster.org/14979
Reviewed-by: Atin Mukherjee <amukherj@redhat.com>
Smoke: Gluster Build System <jenkins@build.gluster.org>
Reviewed-by: Raghavendra G <rgowdapp@redhat.com>
NetBSD-regression: NetBSD Build System <jenkins@build.gluster.org>
CentOS-regression: Gluster Build System <jenkins@build.gluster.org>
-rw-r--r-- | rpc/rpc-transport/socket/src/socket.c | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/rpc/rpc-transport/socket/src/socket.c b/rpc/rpc-transport/socket/src/socket.c index e969186b2f3..a336751b589 100644 --- a/rpc/rpc-transport/socket/src/socket.c +++ b/rpc/rpc-transport/socket/src/socket.c @@ -3143,11 +3143,13 @@ err: arg->this = THIS; arg->trans = this; arg->refd = refd; - th_ret = pthread_create (&th_id, NULL, socket_connect_error_cbk, - arg); + th_ret = gf_thread_create_detached (&th_id, + socket_connect_error_cbk, + arg); if (th_ret) { - gf_log (this->name, GF_LOG_ERROR, "pthread_create" - "failed: %s", strerror(errno)); + /* Error will be logged by gf_thread_create_attached */ + gf_log (this->name, GF_LOG_ERROR, "Thread creation " + "failed"); GF_FREE (arg); GF_ASSERT (0); } |