Use compiler-agnostic defines to silence warning
[lttng-tools.git] / src / lib / lttng-ctl / lttng-ctl.cpp
index 15a699e24f3fd63837edbc6b11dccfa3ac5b1a10..c5c04c262870711d573ea64c72e674a9979725c4 100644 (file)
@@ -24,6 +24,7 @@
 #include <common/filter/filter-ast.hpp>
 #include <common/filter/filter-parser.hpp>
 #include <common/filter/memstream.hpp>
+#include <common/make-unique-wrapper.hpp>
 #include <common/payload-view.hpp>
 #include <common/payload.hpp>
 #include <common/sessiond-comm/sessiond-comm.hpp>
@@ -92,6 +93,7 @@ void lttng_ctl_copy_lttng_domain(struct lttng_domain *dst, struct lttng_domain *
                case LTTNG_DOMAIN_UST:
                case LTTNG_DOMAIN_JUL:
                case LTTNG_DOMAIN_LOG4J:
+               case LTTNG_DOMAIN_LOG4J2:
                case LTTNG_DOMAIN_PYTHON:
                        memcpy(dst, src, sizeof(struct lttng_domain));
                        break;
@@ -1010,12 +1012,14 @@ int lttng_enable_event_with_filter(struct lttng_handle *handle,
  *
  * An event with NO loglevel and the name is * will return NULL.
  */
-static char *set_agent_filter(const char *filter, struct lttng_event *ev)
+static char *
+set_agent_filter(const char *filter, struct lttng_event *ev, struct lttng_domain *domain)
 {
        int err;
        char *agent_filter = nullptr;
 
        LTTNG_ASSERT(ev);
+       LTTNG_ASSERT(domain);
 
        /* Don't add filter for the '*' event. */
        if (strcmp(ev->name, "*") != 0) {
@@ -1031,12 +1035,20 @@ static char *set_agent_filter(const char *filter, struct lttng_event *ev)
                }
        }
 
-       /* Add loglevel filtering if any for the JUL domain. */
+       /* Add loglevel filtering if any for the agent domains. */
        if (ev->loglevel_type != LTTNG_EVENT_LOGLEVEL_ALL) {
                const char *op;
 
                if (ev->loglevel_type == LTTNG_EVENT_LOGLEVEL_RANGE) {
-                       op = ">=";
+                       /*
+                        * Log4j2 is the only agent domain for which more severe
+                        * logging levels have a lower numerical value.
+                        */
+                       if (domain->type == LTTNG_DOMAIN_LOG4J2) {
+                               op = "<=";
+                       } else {
+                               op = ">=";
+                       }
                } else {
                        op = "==";
                }
@@ -1133,18 +1145,20 @@ int lttng_enable_event_with_exclusions(struct lttng_handle *handle,
        /* Parse filter expression. */
        if (filter_expression != nullptr || handle->domain.type == LTTNG_DOMAIN_JUL ||
            handle->domain.type == LTTNG_DOMAIN_LOG4J ||
+           handle->domain.type == LTTNG_DOMAIN_LOG4J2 ||
            handle->domain.type == LTTNG_DOMAIN_PYTHON) {
                if (handle->domain.type == LTTNG_DOMAIN_JUL ||
                    handle->domain.type == LTTNG_DOMAIN_LOG4J ||
+                   handle->domain.type == LTTNG_DOMAIN_LOG4J2 ||
                    handle->domain.type == LTTNG_DOMAIN_PYTHON) {
                        char *agent_filter;
 
                        /* Setup agent filter if needed. */
-                       agent_filter = set_agent_filter(filter_expression, ev);
+                       agent_filter = set_agent_filter(filter_expression, ev, &handle->domain);
                        if (!agent_filter) {
                                if (!filter_expression) {
                                        /*
-                                        * No JUL and no filter, just skip
+                                        * No agent and no filter, just skip
                                         * everything below.
                                         */
                                        goto serialize;
@@ -1213,7 +1227,7 @@ serialize:
 
        {
                struct lttng_payload_view view = lttng_payload_view_from_payload(&payload, 0, -1);
-               int fd_count = lttng_payload_view_get_fd_handle_count(&view);
+               const int fd_count = lttng_payload_view_get_fd_handle_count(&view);
                int fd_to_send;
 
                if (fd_count < 0) {
@@ -1316,14 +1330,16 @@ int lttng_disable_event_ext(struct lttng_handle *handle,
        /* Parse filter expression. */
        if (filter_expression != nullptr || handle->domain.type == LTTNG_DOMAIN_JUL ||
            handle->domain.type == LTTNG_DOMAIN_LOG4J ||
+           handle->domain.type == LTTNG_DOMAIN_LOG4J2 ||
            handle->domain.type == LTTNG_DOMAIN_PYTHON) {
                if (handle->domain.type == LTTNG_DOMAIN_JUL ||
                    handle->domain.type == LTTNG_DOMAIN_LOG4J ||
+                   handle->domain.type == LTTNG_DOMAIN_LOG4J2 ||
                    handle->domain.type == LTTNG_DOMAIN_PYTHON) {
                        char *agent_filter;
 
                        /* Setup agent filter if needed. */
-                       agent_filter = set_agent_filter(filter_expression, ev);
+                       agent_filter = set_agent_filter(filter_expression, ev, &handle->domain);
                        if (!agent_filter) {
                                if (!filter_expression) {
                                        /*
@@ -1396,7 +1412,7 @@ serialize:
 
        {
                struct lttng_payload_view view = lttng_payload_view_from_payload(&payload, 0, -1);
-               int fd_count = lttng_payload_view_get_fd_handle_count(&view);
+               const int fd_count = lttng_payload_view_get_fd_handle_count(&view);
                int fd_to_send;
 
                if (fd_count < 0) {
@@ -1701,7 +1717,7 @@ int lttng_list_tracepoints(struct lttng_handle *handle, struct lttng_event **eve
        nb_events = (unsigned int) cmd_header->count;
 
        {
-               struct lttng_buffer_view events_view =
+               const lttng_buffer_view events_view =
                        lttng_buffer_view_init(reception_buffer, 0, total_payload_received);
                struct lttng_payload_view events_payload_view =
                        lttng_payload_view_from_buffer_view(&events_view, 0, -1);
@@ -1911,7 +1927,7 @@ enum lttng_error_code lttng_create_session_ext(struct lttng_session_descriptor *
                !lttng_session_descriptor_is_output_destination_initialized(session_descriptor);
        if (sessiond_must_generate_ouput) {
                const char *home_dir = utils_get_home_dir();
-               size_t home_dir_len = home_dir ? strlen(home_dir) + 1 : 0;
+               const size_t home_dir_len = home_dir ? strlen(home_dir) + 1 : 0;
 
                if (!home_dir || home_dir_len > LTTNG_PATH_MAX) {
                        ret_code = LTTNG_ERR_FATAL;
@@ -2877,6 +2893,34 @@ end:
        return ret;
 }
 
+/*
+ * Get the status of the kernel tracer
+ *
+ * Sets the value of the argument
+ */
+enum lttng_error_code lttng_get_kernel_tracer_status(enum lttng_kernel_tracer_status *out_status)
+{
+       if (out_status == nullptr) {
+               return LTTNG_ERR_INVALID;
+       }
+
+       struct lttcomm_session_msg lsm = {};
+       lsm.cmd_type = LTTCOMM_SESSIOND_COMMAND_KERNEL_TRACER_STATUS;
+
+       uint32_t *raw_tracer_status = nullptr;
+       const auto ask_ret = lttng_ctl_ask_sessiond(&lsm, (void **) &raw_tracer_status);
+
+       const auto tracer_status =
+               lttng::make_unique_wrapper<uint32_t, lttng::memory::free>(raw_tracer_status);
+
+       if (ask_ret != 4) {
+               return LTTNG_ERR_INVALID;
+       }
+
+       *out_status = (enum lttng_kernel_tracer_status) * tracer_status;
+       return LTTNG_OK;
+}
+
 /*
  * Regenerate the metadata for a session.
  * Return 0 on success, a negative error code on error.
This page took 0.026669 seconds and 4 git commands to generate.