X-Git-Url: https://git.lttng.org/?p=lttng-tools.git;a=blobdiff_plain;f=src%2Fbin%2Flttng-sessiond%2Futils.c;h=99ec7772bfcf849da5730c5aeca3e7924e870261;hp=85a1f0203ae0e9088653271192d13172bf03f566;hb=4a91420cefb94afc4a20042bdbe2564086dad3cb;hpb=feb0f3e5900ff58202ea0c3f227de3c1b8291952 diff --git a/src/bin/lttng-sessiond/utils.c b/src/bin/lttng-sessiond/utils.c index 85a1f0203..99ec7772b 100644 --- a/src/bin/lttng-sessiond/utils.c +++ b/src/bin/lttng-sessiond/utils.c @@ -16,7 +16,7 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ -#define _GNU_SOURCE +#define _LGPL_SOURCE #include #include @@ -32,34 +32,33 @@ int ht_cleanup_pipe[2] = { -1, -1 }; */ int notify_thread_pipe(int wpipe) { - int ret; + ssize_t ret; /* Ignore if the pipe is invalid. */ if (wpipe < 0) { return 0; } - do { - ret = write(wpipe, "!", 1); - } while (ret < 0 && errno == EINTR); - if (ret < 0) { + ret = lttng_write(wpipe, "!", 1); + if (ret < 1) { PERROR("write poll pipe"); } - return ret; + return (int) ret; } void ht_cleanup_push(struct lttng_ht *ht) { - int ret; + ssize_t ret; int fd = ht_cleanup_pipe[1]; + if (!ht) { + return; + } if (fd < 0) return; - do { - ret = write(fd, &ht, sizeof(ht)); - } while (ret < 0 && errno == EINTR); - if (ret < 0 || ret != sizeof(ht)) { + ret = lttng_write(fd, &ht, sizeof(ht)); + if (ret < sizeof(ht)) { PERROR("write ht cleanup pipe %d", fd); if (ret < 0) { ret = -errno; @@ -72,3 +71,46 @@ void ht_cleanup_push(struct lttng_ht *ht) error: assert(!ret); } + +int loglevels_match(int a_loglevel_type, int a_loglevel_value, + int b_loglevel_type, int b_loglevel_value, int loglevel_all_type) +{ + int match = 1; + + if (a_loglevel_type == b_loglevel_type) { + /* Same loglevel type. */ + if (b_loglevel_type != loglevel_all_type) { + /* + * Loglevel value must also match since the loglevel + * type is not all. + */ + if (a_loglevel_value != b_loglevel_value) { + match = 0; + } + } + } else { + /* Loglevel type is different: no match. */ + match = 0; + } + + return match; +} + +const char *session_get_base_path(const struct ltt_session *session) +{ + struct consumer_output *consumer; + + if (session->kernel_session) { + consumer = session->kernel_session->consumer; + } else if (session->ust_session) { + consumer = session->ust_session->consumer; + } else { + abort(); + } + + if (session->net_handle > 0) { + return consumer->dst.net.base_dir; + } else { + return consumer->dst.session_root_path; + } +}