Backport: relayd: track the health unix socket with the fd-tracker
[lttng-tools.git] / src / bin / lttng-relayd / health-relayd.c
index c6dd2e8523f3466abb81d97356b1c13ce1f71273..9b747dd67b7eefb40e2544430f9eef29404d326a 100644 (file)
@@ -37,7 +37,6 @@
 #include <sys/mman.h>
 #include <assert.h>
 #include <urcu/compiler.h>
-#include <ulimit.h>
 #include <inttypes.h>
 
 #include <common/defaults.h>
@@ -48,6 +47,7 @@
 #include <common/sessiond-comm/sessiond-comm.h>
 #include <common/utils.h>
 #include <common/compat/getenv.h>
+#include <common/fd-tracker/utils.h>
 
 #include "lttng-relayd.h"
 #include "health-relayd.h"
@@ -225,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.
  */
@@ -236,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");
 
@@ -247,10 +265,19 @@ 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");
-               ret = -1;
+               err = -1;
                goto error;
        }
 
@@ -262,7 +289,7 @@ void *thread_manage_health(void *data)
                if (ret < 0) {
                        ERR("Unable to set group on %s", health_unix_sock_path);
                        PERROR("chown");
-                       ret = -1;
+                       err = -1;
                        goto error;
                }
 
@@ -271,7 +298,7 @@ void *thread_manage_health(void *data)
                if (ret < 0) {
                        ERR("Unable to set permissions on %s", health_unix_sock_path);
                        PERROR("chmod");
-                       ret = -1;
+                       err = -1;
                        goto error;
                }
        }
@@ -409,15 +436,17 @@ restart:
                new_sock = -1;
        }
 
-exit:
 error:
+       lttng_relay_stop_threads();
+exit:
        if (err) {
                ERR("Health error occurred in %s", __func__);
        }
        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");
                }
This page took 0.030412 seconds and 5 git commands to generate.