#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>
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;
*
* 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) {
}
}
- /* 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 = "==";
}
/* 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;
{
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) {
/* 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) {
/*
{
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) {
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);
!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;
*
* Sets the value of the argument
*/
-enum lttng_error_code lttng_get_kernel_tracer_status(enum lttng_kernel_tracer_status *status)
+enum lttng_error_code lttng_get_kernel_tracer_status(enum lttng_kernel_tracer_status *out_status)
{
- enum lttng_error_code ret = LTTNG_ERR_INVALID;
-
- if (status == nullptr) {
+ if (out_status == nullptr) {
return LTTNG_ERR_INVALID;
}
struct lttcomm_session_msg lsm = {};
lsm.cmd_type = LTTCOMM_SESSIOND_COMMAND_KERNEL_TRACER_STATUS;
- uint32_t *u_status = nullptr;
- const auto ask_ret = lttng_ctl_ask_sessiond(&lsm, (void **) &u_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) {
- goto end;
+ return LTTNG_ERR_INVALID;
}
- *status = (enum lttng_kernel_tracer_status) * u_status;
- ret = LTTNG_OK;
-end:
- free(u_status);
- return ret;
+ *out_status = (enum lttng_kernel_tracer_status) * tracer_status;
+ return LTTNG_OK;
}
/*