X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=src%2Fbin%2Flttng-sessiond%2Futils.cpp;fp=src%2Fbin%2Flttng-sessiond%2Futils.cpp;h=6936a03f963de2d0d37a18040f39fbd32b99d2a1;hb=7966af5763c4aaca39df9bbfa9277ff15715c720;hp=0000000000000000000000000000000000000000;hpb=3a5f70173aa04d11ccb22694d5d31a702cad33ab;p=lttng-tools.git diff --git a/src/bin/lttng-sessiond/utils.cpp b/src/bin/lttng-sessiond/utils.cpp new file mode 100644 index 000000000..6936a03f9 --- /dev/null +++ b/src/bin/lttng-sessiond/utils.cpp @@ -0,0 +1,100 @@ +/* + * Copyright (C) 2011 David Goulet + * Copyright (C) 2011 Mathieu Desnoyers + * + * SPDX-License-Identifier: GPL-2.0-only + * + */ + +#define _LGPL_SOURCE +#include +#include + +#include + +#include "utils.h" +#include "snapshot.h" +#include "lttng-sessiond.h" + +int the_ht_cleanup_pipe[2] = {-1, -1}; + +/* + * Write to writable pipe used to notify a thread. + */ +int notify_thread_pipe(int wpipe) +{ + ssize_t ret; + + /* Ignore if the pipe is invalid. */ + if (wpipe < 0) { + return 0; + } + + ret = lttng_write(wpipe, "!", 1); + if (ret < 1) { + PERROR("write poll pipe"); + } + + return (int) ret; +} + +void ht_cleanup_push(struct lttng_ht *ht) +{ + ssize_t ret; + int fd = the_ht_cleanup_pipe[1]; + + if (!ht) { + return; + } + if (fd < 0) + return; + ret = lttng_write(fd, &ht, sizeof(ht)); + if (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: + LTTNG_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) +{ + return consumer_output_get_base_path(session->consumer); +} + +const char *consumer_output_get_base_path(const struct consumer_output *output) +{ + return output->type == CONSUMER_DST_LOCAL ? + output->dst.session_root_path : + output->dst.net.base_dir; +}