From 5615fbca87d2f5f298c50fa530848ed87f2a723e Mon Sep 17 00:00:00 2001 From: =?utf8?q?J=C3=A9r=C3=A9mie=20Galarneau?= Date: Tue, 26 Jun 2018 17:38:22 -0400 Subject: [PATCH] Backport: relayd: track clients of the health unix socket with the fd-tracker MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Jérémie Galarneau --- src/bin/lttng-relayd/health-relayd.c | 41 +++++++++++++++++++++++++--- 1 file changed, 37 insertions(+), 4 deletions(-) diff --git a/src/bin/lttng-relayd/health-relayd.c b/src/bin/lttng-relayd/health-relayd.c index 9b747dd67..13c48a67c 100644 --- a/src/bin/lttng-relayd/health-relayd.c +++ b/src/bin/lttng-relayd/health-relayd.c @@ -242,6 +242,23 @@ end: return ret; } +static +int accept_unix_socket(void *data, int *out_fd) +{ + int ret; + int accepting_sock = *((int *) data); + + ret = lttcomm_accept_unix_sock(accepting_sock); + if (ret < 0) { + goto end; + } + + *out_fd = ret; + ret = 0; +end: + return ret; +} + /* * Thread managing health check socket. */ @@ -335,6 +352,8 @@ void *thread_manage_health(void *data) lttng_relay_notify_ready(); while (1) { + char *accepted_socket_name; + DBG("Health check ready"); /* Inifinite blocking call, waiting for transmission */ @@ -383,8 +402,18 @@ restart: } } - new_sock = lttcomm_accept_unix_sock(sock); - if (new_sock < 0) { + ret = asprintf(&accepted_socket_name, "Socket accepted from unix socket @ %s", + health_unix_sock_path); + if (ret == -1) { + PERROR("Failed to allocate name of accepted socket from unix socket @ %s", + health_unix_sock_path); + goto error; + } + ret = fd_tracker_open_unsuspendable_fd(the_fd_tracker, &new_sock, + (const char **) &accepted_socket_name, 1, + accept_unix_socket, &sock); + free(accepted_socket_name); + if (ret < 0) { goto error; } @@ -398,7 +427,9 @@ restart: ret = lttcomm_recv_unix_sock(new_sock, (void *)&msg, sizeof(msg)); if (ret <= 0) { DBG("Nothing recv() from client... continuing"); - ret = close(new_sock); + ret = fd_tracker_close_unsuspendable_fd(the_fd_tracker, + &new_sock, 1, fd_tracker_util_close_fd, + NULL); if (ret) { PERROR("close"); } @@ -429,7 +460,9 @@ restart: } /* End of transmission */ - ret = close(new_sock); + ret = fd_tracker_close_unsuspendable_fd(the_fd_tracker, + &new_sock, 1, fd_tracker_util_close_fd, + NULL); if (ret) { PERROR("close"); } -- 2.34.1