From 2e1dcff885e8f11f8e914ba9eff56dbf8dacda53 Mon Sep 17 00:00:00 2001 From: =?utf8?q?J=C3=A9r=C3=A9mie=20Galarneau?= Date: Tue, 26 Jun 2018 17:20:47 -0400 Subject: [PATCH] Backport: relayd: track 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 | 35 +++++++++++++++++++++++++--- 1 file changed, 32 insertions(+), 3 deletions(-) diff --git a/src/bin/lttng-relayd/health-relayd.c b/src/bin/lttng-relayd/health-relayd.c index ba996621b..9b747dd67 100644 --- a/src/bin/lttng-relayd/health-relayd.c +++ b/src/bin/lttng-relayd/health-relayd.c @@ -47,6 +47,7 @@ #include #include #include +#include #include "lttng-relayd.h" #include "health-relayd.h" @@ -224,6 +225,23 @@ end: return ret; } +static +int open_unix_socket(void *data, int *out_fd) +{ + int ret; + const char *path = data; + + ret = lttcomm_create_unix_sock(path); + if (ret < 0) { + goto end; + } + + *out_fd = ret; + ret = 0; +end: + return ret; +} + /* * Thread managing health check socket. */ @@ -235,6 +253,7 @@ void *thread_manage_health(void *data) struct health_comm_msg msg; struct health_comm_reply reply; int is_root; + char *sock_name; DBG("[thread] Manage health check started"); @@ -246,8 +265,17 @@ void *thread_manage_health(void *data) lttng_poll_init(&events); /* Create unix socket */ - sock = lttcomm_create_unix_sock(health_unix_sock_path); - if (sock < 0) { + ret = asprintf(&sock_name, "Unix socket @ %s", health_unix_sock_path); + if (ret == -1) { + PERROR("Failed to allocate unix socket name"); + err = -1; + goto error; + } + ret = fd_tracker_open_unsuspendable_fd(the_fd_tracker, &sock, + (const char **) &sock_name, 1, open_unix_socket, + health_unix_sock_path); + free(sock_name); + if (ret < 0) { ERR("Unable to create health check Unix socket"); err = -1; goto error; @@ -417,7 +445,8 @@ exit: DBG("Health check thread dying"); unlink(health_unix_sock_path); if (sock >= 0) { - ret = close(sock); + ret = fd_tracker_close_unsuspendable_fd(the_fd_tracker, &sock, + 1, fd_tracker_util_close_fd, NULL); if (ret) { PERROR("close"); } -- 2.34.1