X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=src%2Fcommon%2Ferror-query.cpp;h=d3831ae81b86bf6c509c42818119fc937394cde2;hb=e35e95ea77196e8997a02eda4bb8c1c5c6cba0fb;hp=31de0ee5e764c7d1b0ea98a784668afaedbdc304;hpb=f149493493fbd8a3efa4748832c03278c96c38ca;p=lttng-tools.git diff --git a/src/common/error-query.cpp b/src/common/error-query.cpp index 31de0ee5e..d3831ae81 100644 --- a/src/common/error-query.cpp +++ b/src/common/error-query.cpp @@ -58,7 +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_action_path *action_path; }; struct lttng_error_query_result_comm { @@ -248,15 +248,42 @@ 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 = + lttng::utils::container_of(query, <tng_error_query_trigger::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 = lttng::utils::container_of( + query, <tng_error_query_condition::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 = lttng::utils::container_of( + query, <tng_error_query_action::parent); + + lttng_trigger_put(action_query->trigger); + lttng_action_path_destroy(action_query->action_path); + free(action_query); + break; + } + default: + abort(); + } } static @@ -267,7 +294,8 @@ int lttng_error_query_result_counter_serialize( const struct lttng_error_query_result_counter *counter_result; LTTNG_ASSERT(result->type == LTTNG_ERROR_QUERY_RESULT_TYPE_COUNTER); - counter_result = container_of(result, typeof(*counter_result), parent); + counter_result = lttng::utils::container_of( + result, <tng_error_query_result_counter::parent); lttng_error_query_result_counter_comm comm = { .value = counter_result->value, @@ -283,11 +311,11 @@ int lttng_error_query_result_serialize( struct lttng_payload *payload) { int ret; - struct lttng_error_query_result_comm header = { - .type = (uint8_t) result->type, - .name_len = (typeof(header.name_len)) strlen(result->name) + 1, - .description_len = (typeof(header.name_len)) strlen(result->description) + 1, - }; + struct lttng_error_query_result_comm header; + + header.type = (uint8_t) result->type; + header.name_len = (typeof(header.name_len)) strlen(result->name) + 1; + header.description_len = (typeof(header.name_len)) strlen(result->description) + 1; /* Header. */ ret = lttng_dynamic_buffer_append( @@ -537,9 +565,9 @@ int lttng_error_query_results_serialize( size_t result_index; const size_t result_count = lttng_dynamic_pointer_array_get_count( &results->results); - const struct lttng_error_query_results_comm header = { - .count = (decltype(header.count)) result_count, - }; + struct lttng_error_query_results_comm header; + + header.count = (decltype(header.count)) result_count; /* Header. */ ret = lttng_dynamic_buffer_append(&payload->buffer, &header, sizeof(header)); @@ -632,7 +660,7 @@ int lttng_error_query_trigger_serialize(const struct lttng_error_query *query, { int ret; const struct lttng_error_query_trigger *query_trigger = - container_of(query, typeof(*query_trigger), parent); + lttng::utils::container_of(query, <tng_error_query_trigger::parent); if (!lttng_trigger_validate(query_trigger->trigger)) { ret = -1; @@ -654,7 +682,7 @@ int lttng_error_query_condition_serialize(const struct lttng_error_query *query, { int ret; const struct lttng_error_query_condition *query_trigger = - container_of(query, typeof(*query_trigger), parent); + lttng::utils::container_of(query, <tng_error_query_condition::parent); if (!lttng_trigger_validate(query_trigger->trigger)) { ret = -1; @@ -676,7 +704,7 @@ int lttng_error_query_action_serialize(const struct lttng_error_query *query, { int ret; const struct lttng_error_query_action *query_action = - container_of(query, typeof(*query_action), parent); + lttng::utils::container_of(query, <tng_error_query_action::parent); if (!lttng_trigger_validate(query_action->trigger)) { ret = -1; @@ -688,7 +716,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; } @@ -707,7 +735,7 @@ const struct lttng_trigger *lttng_error_query_trigger_borrow_target( const struct lttng_error_query *query) { const struct lttng_error_query_trigger *query_trigger = - container_of(query, typeof(*query_trigger), parent); + lttng::utils::container_of(query, <tng_error_query_trigger::parent); return query_trigger->trigger; } @@ -716,7 +744,7 @@ const struct lttng_trigger *lttng_error_query_condition_borrow_target( const struct lttng_error_query *query) { const struct lttng_error_query_condition *query_trigger = - container_of(query, typeof(*query_trigger), parent); + lttng::utils::container_of(query, <tng_error_query_condition::parent); return query_trigger->trigger; } @@ -725,29 +753,28 @@ const struct lttng_trigger *lttng_error_query_action_borrow_trigger_target( const struct lttng_error_query *query) { const struct lttng_error_query_action *query_action = - container_of(query, typeof(*query_action), parent); + lttng::utils::container_of(query, <tng_error_query_action::parent); return query_action->trigger; } struct lttng_action *lttng_error_query_action_borrow_action_target( - const struct lttng_error_query *query, - struct lttng_trigger *trigger) + const struct lttng_error_query *query, struct lttng_trigger *trigger) { const struct lttng_error_query_action *query_action = - container_of(query, typeof(*query_action), parent); + lttng::utils::container_of(query, <tng_error_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, struct lttng_payload *payload) { int ret; - const struct lttng_error_query_comm header = { - .target_type = (decltype(header.target_type)) query->target_type, - }; + struct lttng_error_query_comm header; + + header.target_type = (decltype(header.target_type)) query->target_type; ret = lttng_dynamic_buffer_append( &payload->buffer, &header, sizeof(header)); @@ -1041,7 +1068,8 @@ enum lttng_error_query_result_status lttng_error_query_result_counter_get_value( goto end; } - counter_result = container_of(result, typeof(*counter_result), parent); + counter_result = lttng::utils::container_of( + result, <tng_error_query_result_counter::parent); *value = counter_result->value; status = LTTNG_ERROR_QUERY_RESULT_STATUS_OK;