From 2ee48474be32f6ead2f3834677fee89d88348382 Mon Sep 17 00:00:00 2001 From: Mohit Agrawal Date: Mon, 13 Jun 2016 12:41:15 +0530 Subject: rpc/socket.c: Modify approach to cleanup threads of socket_poller in socket_spawn. Problem: Current approach to cleanup threads of socket_poller is not appropriate. Solution: Enable detach flag at the time of thread creation in socket_spawn. Fix: Write a new wrapper(gf_create_detach_thread) to create detachable thread instead of store thread ids in a queue. Test: Fix is verfied on gluster process, To test the patch followed below procedure Enable the client.ssl and server.ssl option on the volume Start the volume and count anon segment in pmap output for glusterd process pmap -x | grep "\[ anon \]" | wc -l Stop the volume and check again count of anon segment it should not increase. Signed-off-by: Mohit Agrawal Change-Id: Ib8f7ec7504ec8f6f74b45ce6719b6fb47f9fdc37 BUG: 1336508 Reviewed-on: http://review.gluster.org/14694 Smoke: Gluster Build System Reviewed-by: Atin Mukherjee CentOS-regression: Gluster Build System NetBSD-regression: NetBSD Build System Reviewed-by: Jeff Darcy --- libglusterfs/src/common-utils.c | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) (limited to 'libglusterfs/src/common-utils.c') diff --git a/libglusterfs/src/common-utils.c b/libglusterfs/src/common-utils.c index a225c957f2e..97d9ef8da1a 100644 --- a/libglusterfs/src/common-utils.c +++ b/libglusterfs/src/common-utils.c @@ -3554,6 +3554,36 @@ gf_thread_create (pthread_t *thread, const pthread_attr_t *attr, return ret; } +int +gf_thread_create_detached (pthread_t *thread, + void *(*start_routine)(void *), void *arg) +{ + pthread_attr_t attr; + int ret = -1; + + ret = pthread_attr_init (&attr); + if (ret) { + gf_msg (THIS->name, GF_LOG_ERROR, ret, + LG_MSG_PTHREAD_ATTR_INIT_FAILED, + "Thread attribute initialization failed"); + return -1; + } + + pthread_attr_setdetachstate (&attr, PTHREAD_CREATE_DETACHED); + + ret = gf_thread_create (thread, &attr, start_routine, arg); + if (ret) { + gf_msg (THIS->name, GF_LOG_ERROR, ret, + LG_MSG_PTHREAD_FAILED, + "Thread creation failed"); + ret = -1; + } + + pthread_attr_destroy (&attr); + + return ret; +} + int gf_skip_header_section (int fd, int header_len) { -- cgit