Fix: compat poll: add missing empty revents checks
[lttng-tools.git] / src / bin / lttng-consumerd / health-consumerd.c
index 60808f37094d304480468875c5cde6b944599c9c..fc9a266653f2361efe3a4987bd2640e125761d8c 100644 (file)
@@ -16,6 +16,7 @@
  */
 
 #define _GNU_SOURCE
+#define _LGPL_SOURCE
 #include <fcntl.h>
 #include <getopt.h>
 #include <grp.h>
@@ -119,8 +120,6 @@ int setup_health_path(void)
                        goto end;
                }
        } else {
-               static char *rundir;
-
                home_path = utils_get_home_dir();
                if (home_path == NULL) {
                        /* TODO: Add --socket PATH option */
@@ -129,16 +128,6 @@ int setup_health_path(void)
                        goto end;
                }
 
-               /*
-                * Create rundir from home path. This will create something like
-                * $HOME/.lttng
-                */
-               ret = asprintf(&rundir, DEFAULT_LTTNG_HOME_RUNDIR, home_path);
-               if (ret < 0) {
-                       ret = -ENOMEM;
-                       goto end;
-               }
-
                /* Set health check Unix path */
                if (strlen(health_unix_sock_path) != 0) {
                        goto end;
@@ -146,22 +135,21 @@ int setup_health_path(void)
                switch (type) {
                case LTTNG_CONSUMER_KERNEL:
                        snprintf(health_unix_sock_path, sizeof(health_unix_sock_path),
-                               DEFAULT_HOME_KCONSUMER_HEALTH_UNIX_SOCK, rundir);
+                               DEFAULT_HOME_KCONSUMER_HEALTH_UNIX_SOCK, home_path);
                        break;
                case LTTNG_CONSUMER64_UST:
                        snprintf(health_unix_sock_path, sizeof(health_unix_sock_path),
-                               DEFAULT_HOME_USTCONSUMER64_HEALTH_UNIX_SOCK, rundir);
+                               DEFAULT_HOME_USTCONSUMER64_HEALTH_UNIX_SOCK, home_path);
                        break;
                case LTTNG_CONSUMER32_UST:
                        snprintf(health_unix_sock_path, sizeof(health_unix_sock_path),
-                               DEFAULT_HOME_USTCONSUMER32_HEALTH_UNIX_SOCK, rundir);
+                               DEFAULT_HOME_USTCONSUMER32_HEALTH_UNIX_SOCK, home_path);
                        break;
                default:
                        ret = -EINVAL;
                        goto end;
                }
        }
-
 end:
        return ret;
 }
@@ -246,6 +234,10 @@ void *thread_manage_health(void *data)
                goto error;
        }
 
+       /* Perform prior memory accesses before decrementing ready */
+       cmm_smp_mb__before_uatomic_dec();
+       uatomic_dec(&lttng_consumer_ready);
+
        while (1) {
                DBG("Health check ready");
 
@@ -269,6 +261,11 @@ restart:
                        revents = LTTNG_POLL_GETEV(&events, i);
                        pollfd = LTTNG_POLL_GETFD(&events, i);
 
+                       if (!revents) {
+                               /* No activity for this FD (poll implementation). */
+                               continue;
+                       }
+
                        /* Thread quit pipe has been closed. Killing thread. */
                        ret = check_health_quit_pipe(pollfd, revents);
                        if (ret) {
@@ -312,7 +309,7 @@ restart:
 
                assert(msg.cmd == HEALTH_CMD_CHECK);
 
-               reply.ret_code = 0;
+               memset(&reply, 0, sizeof(reply));
                for (i = 0; i < NR_HEALTH_CONSUMERD_TYPES; i++) {
                        /*
                         * health_check_state return 0 if thread is in
@@ -323,7 +320,7 @@ restart:
                        }
                }
 
-               DBG2("Health check return value %" PRIx64, reply.ret_code);
+               DBG("Health check return value %" PRIx64, reply.ret_code);
 
                ret = send_unix_sock(new_sock, (void *) &reply, sizeof(reply));
                if (ret < 0) {
This page took 0.024843 seconds and 4 git commands to generate.