X-Git-Url: https://git.lttng.org/?p=lttng-tools.git;a=blobdiff_plain;f=src%2Fbin%2Flttng-sessiond%2Futils.c;h=85a1f0203ae0e9088653271192d13172bf03f566;hp=07f29adedcebc0570c81bc153fe07769991b4e69;hb=bd722d76b035766511f0b329f9bbaa2f4180c4ed;hpb=81b8677518a0a8836d0b17e5c2a7fb43382a44c1 diff --git a/src/bin/lttng-sessiond/utils.c b/src/bin/lttng-sessiond/utils.c index 07f29aded..85a1f0203 100644 --- a/src/bin/lttng-sessiond/utils.c +++ b/src/bin/lttng-sessiond/utils.c @@ -23,6 +23,9 @@ #include #include "utils.h" +#include "lttng-sessiond.h" + +int ht_cleanup_pipe[2] = { -1, -1 }; /* * Write to writable pipe used to notify a thread. @@ -31,7 +34,14 @@ int notify_thread_pipe(int wpipe) { int ret; - ret = write(wpipe, "!", 1); + /* Ignore if the pipe is invalid. */ + if (wpipe < 0) { + return 0; + } + + do { + ret = write(wpipe, "!", 1); + } while (ret < 0 && errno == EINTR); if (ret < 0) { PERROR("write poll pipe"); } @@ -39,12 +49,26 @@ int notify_thread_pipe(int wpipe) return ret; } -/* - * Return pointer to home directory path using the env variable HOME. - * - * No home, NULL is returned. - */ -const char *get_home_dir(void) +void ht_cleanup_push(struct lttng_ht *ht) { - return ((const char *) getenv("HOME")); + int ret; + int fd = ht_cleanup_pipe[1]; + + if (fd < 0) + return; + do { + ret = write(fd, &ht, sizeof(ht)); + } while (ret < 0 && errno == EINTR); + if (ret < 0 || ret != sizeof(ht)) { + PERROR("write ht cleanup pipe %d", fd); + if (ret < 0) { + ret = -errno; + } + goto error; + } + + /* All good. Don't send back the write positive ret value. */ + ret = 0; +error: + assert(!ret); }