X-Git-Url: https://git.lttng.org/?p=lttng-tools.git;a=blobdiff_plain;f=src%2Fbin%2Flttng-relayd%2Fmain.c;h=16bfccbfa0c982cd3c7fcd33c0ed1ea0999369cf;hp=c1681aafc0567ba10a372e496ef242223765eba0;hb=9c256b0146b021962e93fda7400c61ceb2b0d45f;hpb=e32a08649483b8b1dabd5335628041e1365b5b08 diff --git a/src/bin/lttng-relayd/main.c b/src/bin/lttng-relayd/main.c index c1681aafc..16bfccbfa 100644 --- a/src/bin/lttng-relayd/main.c +++ b/src/bin/lttng-relayd/main.c @@ -677,6 +677,11 @@ static void relayd_cleanup(void) sessiond_trace_chunk_registry); } if (the_fd_tracker) { + untrack_stdio(); + /* + * fd_tracker_destroy() will log the contents of the fd-tracker + * if a leak is detected. + */ fd_tracker_destroy(the_fd_tracker); } @@ -687,7 +692,6 @@ static void relayd_cleanup(void) if (tracing_group_name_override) { free((void *) tracing_group_name); } - fd_tracker_log(the_fd_tracker); } /* @@ -884,14 +888,6 @@ 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. * @@ -977,7 +973,7 @@ static void *relay_thread_listener(void *data) * Pass 3 as size here for the thread quit pipe, control and * data socket. */ - ret = create_thread_poll_set(&events, 3); + ret = create_named_thread_poll_set(&events, 3, "Listener thread epoll"); if (ret < 0) { goto error_create_poll; } @@ -1111,7 +1107,7 @@ exit: error: error_poll_add: error_testpoint: - lttng_poll_clean(&events); + (void) fd_tracker_util_poll_clean(the_fd_tracker, &events); error_create_poll: if (data_sock->fd >= 0) { ret = data_sock->ops->close(data_sock); @@ -3995,6 +3991,39 @@ static int create_relay_conn_pipe(void) "Relayd connection pipe", relay_conn_pipe); } +static int stdio_open(void *data, int *fds) +{ + fds[0] = fileno(stdout); + fds[1] = fileno(stderr); + return 0; +} + +static int noop_close(void *data, int *fds) +{ + return 0; +} + +static int track_stdio(void) +{ + int fds[2]; + const char *names[] = { "stdout", "stderr" }; + + return fd_tracker_open_unsuspendable_fd(the_fd_tracker, fds, + names, 2, stdio_open, NULL); +} + +static void untrack_stdio(void) +{ + int fds[] = { fileno(stdout), fileno(stderr) }; + + /* + * noop_close is used since we don't really want to close + * the stdio output fds; we merely want to stop tracking them. + */ + (void) fd_tracker_close_unsuspendable_fd(the_fd_tracker, + fds, 2, noop_close, NULL); +} + /* * main */ @@ -4099,6 +4128,12 @@ int main(int argc, char **argv) goto exit_options; } + ret = track_stdio(); + if (ret) { + retval = -1; + goto exit_options; + } + /* Initialize thread health monitoring */ health_relayd = health_app_create(NR_HEALTH_RELAYD_TYPES); if (!health_relayd) {