X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=src%2Fcommon%2Ferror-query.cpp;h=8c1bb95414feb84e1300a5570c47cd9ce0c83501;hb=1ad48d9678f8f123dc7d44dbbfadc9957b7e970e;hp=8072b26bdcdcaef9f97c85f5c2b05339f3998736;hpb=c10f9cdd994258358bb3766c2e92dab71e4ceef2;p=lttng-tools.git diff --git a/src/common/error-query.cpp b/src/common/error-query.cpp index 8072b26bd..8c1bb9541 100644 --- a/src/common/error-query.cpp +++ b/src/common/error-query.cpp @@ -7,23 +7,34 @@ * */ -#include -#include -#include -#include -#include -#include -#include -#include -#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include -#include +#include #include struct lttng_error_query { enum lttng_error_query_target_type target_type; }; +struct lttng_error_query_result { + enum lttng_error_query_result_type type; + char *name; + char *description; +}; + +struct lttng_error_query_results { + struct lttng_dynamic_pointer_array results; +}; + +namespace { struct lttng_error_query_comm { /* enum lttng_error_query_target_type */ int8_t target_type; @@ -47,13 +58,7 @@ struct lttng_error_query_action { struct lttng_error_query parent; /* Mutable only because of the reference count. */ struct lttng_trigger *trigger; - struct lttng_action_path action_path; -}; - -struct lttng_error_query_result { - enum lttng_error_query_result_type type; - char *name; - char *description; + struct lttng_action_path *action_path; }; struct lttng_error_query_result_comm { @@ -81,10 +86,7 @@ struct lttng_error_query_results_comm { /* `count` instances of `struct lttng_error_query_result` follow. */ char payload[]; } LTTNG_PACKED; - -struct lttng_error_query_results { - struct lttng_dynamic_pointer_array results; -}; +} /* namespace */ static enum lttng_error_code lttng_error_query_result_mi_serialize( @@ -111,7 +113,7 @@ struct lttng_error_query *lttng_error_query_trigger_create( goto end; } - query = (lttng_error_query_trigger *) zmalloc(sizeof(*query)); + query = zmalloc(); if (!query) { PERROR("Failed to allocate trigger error query"); goto error; @@ -142,7 +144,7 @@ struct lttng_error_query *lttng_error_query_condition_create( goto end; } - query = (lttng_error_query_condition *) zmalloc(sizeof(*query)); + query = zmalloc(); if (!query) { PERROR("Failed to allocate condition error query"); goto error; @@ -221,7 +223,7 @@ struct lttng_error_query *lttng_error_query_action_create( goto end; } - query = (lttng_error_query_action *) zmalloc(sizeof(*query)); + query = zmalloc(); if (!query) { PERROR("Failed to allocate action error query"); goto error; @@ -246,15 +248,45 @@ end: void lttng_error_query_destroy(struct lttng_error_query *query) { - struct lttng_error_query_trigger *trigger_query; - if (!query) { return; } - trigger_query = container_of(query, typeof(*trigger_query), parent); - lttng_trigger_put(trigger_query->trigger); - free(trigger_query); + switch (query->target_type) { + case LTTNG_ERROR_QUERY_TARGET_TYPE_TRIGGER: + { + struct lttng_error_query_trigger *trigger_query = + container_of(query, typeof(*trigger_query), + parent); + + lttng_trigger_put(trigger_query->trigger); + free(trigger_query); + break; + } + case LTTNG_ERROR_QUERY_TARGET_TYPE_CONDITION: + { + struct lttng_error_query_condition *condition_query = + container_of(query, typeof(*condition_query), + parent); + + lttng_trigger_put(condition_query->trigger); + free(condition_query); + break; + } + case LTTNG_ERROR_QUERY_TARGET_TYPE_ACTION: + { + struct lttng_error_query_action *action_query = + container_of(query, typeof(*action_query), + parent); + + lttng_trigger_put(action_query->trigger); + lttng_action_path_destroy(action_query->action_path); + free(action_query); + break; + } + default: + abort(); + } } static @@ -388,7 +420,7 @@ lttng_error_query_result_counter_create( int init_ret; struct lttng_error_query_result_counter *counter; - counter = (lttng_error_query_result_counter *) zmalloc(sizeof(*counter)); + counter = zmalloc(); if (!counter) { PERROR("Failed to allocate error query counter result"); goto end; @@ -419,7 +451,7 @@ void destroy_result(void *ptr) struct lttng_error_query_results *lttng_error_query_results_create(void) { - struct lttng_error_query_results *set = (lttng_error_query_results *) zmalloc(sizeof(*set)); + struct lttng_error_query_results *set = zmalloc(); if (!set) { PERROR("Failed to allocate an error query result set"); @@ -686,7 +718,7 @@ int lttng_error_query_action_serialize(const struct lttng_error_query *query, goto end; } - ret = lttng_action_path_serialize(&query_action->action_path, payload); + ret = lttng_action_path_serialize(query_action->action_path, payload); if (ret) { goto end; } @@ -736,7 +768,7 @@ struct lttng_action *lttng_error_query_action_borrow_action_target( container_of(query, typeof(*query_action), parent); return get_trigger_action_from_path( - trigger, &query_action->action_path); + trigger, query_action->action_path); } int lttng_error_query_serialize(const struct lttng_error_query *query,