From: Jérémie Galarneau Date: Tue, 26 Nov 2019 23:14:57 +0000 (-0500) Subject: relayd: track worker thread's epoll fd using the fd-tracker X-Git-Url: http://git.efficios.com/?p=lttng-tools.git;a=commitdiff_plain;h=e32a08649483b8b1dabd5335628041e1365b5b08;ds=sidebyside relayd: track worker thread's epoll fd using the fd-tracker This commit introduces an fd leak report (bogus) which is caused by another thread using the same poll initialization functions as the worker thread. The fd is cleaned-up by that other thread, but the fd-tracker is not aware of this, thus causing the report. This is adressed in a follow-up patch. Signed-off-by: Jérémie Galarneau Change-Id: I105fddcf3421373f9746c1d8f31016462af2448e --- diff --git a/src/bin/lttng-relayd/main.c b/src/bin/lttng-relayd/main.c index 80d2fb189..c1681aafc 100644 --- a/src/bin/lttng-relayd/main.c +++ b/src/bin/lttng-relayd/main.c @@ -859,7 +859,8 @@ static int init_health_quit_pipe(void) /* * Create a poll set with O_CLOEXEC and add the thread quit pipe to the set. */ -static int create_thread_poll_set(struct lttng_poll_event *events, int size) +static int create_named_thread_poll_set(struct lttng_poll_event *events, + int size, const char *name) { int ret; @@ -868,10 +869,8 @@ static int create_thread_poll_set(struct lttng_poll_event *events, int size) goto error; } - ret = lttng_poll_create(events, size, LTTNG_CLOEXEC); - if (ret < 0) { - goto error; - } + ret = fd_tracker_util_poll_create(the_fd_tracker, + name, events, 1, LTTNG_CLOEXEC); /* Add quit pipe */ ret = lttng_poll_add(events, thread_quit_pipe[0], LPOLLIN | LPOLLERR); @@ -885,6 +884,14 @@ error: return ret; } +/* + * Create a poll set with O_CLOEXEC and add the thread quit pipe to the set. + */ +static int create_thread_poll_set(struct lttng_poll_event *events, int size) +{ + return create_named_thread_poll_set(events, size, "Unknown epoll"); +} + /* * Check if the thread quit pipe was triggered. * @@ -3687,7 +3694,7 @@ static void *relay_thread_worker(void *data) goto relay_connections_ht_error; } - ret = create_thread_poll_set(&events, 2); + ret = create_named_thread_poll_set(&events, 2, "Worker thread epoll"); if (ret < 0) { goto error_poll_create; } @@ -3956,7 +3963,7 @@ error: } rcu_read_unlock(); - lttng_poll_clean(&events); + (void) fd_tracker_util_poll_clean(the_fd_tracker, &events); error_poll_create: lttng_ht_destroy(relay_connections_ht); relay_connections_ht_error: