X-Git-Url: https://git.lttng.org/?p=lttng-tools.git;a=blobdiff_plain;f=src%2Fcommon%2Ftrigger.c;h=55ab99729c338259d72476e1a8074d12b9e5f43f;hp=132fda138912ef8ac264f6452f274614c1b19eca;hb=0de2479d5f5a287d31c69e34ea5202a69019f224;hpb=91c96f622ad9eadbf44a63b55289f673be9cf90e diff --git a/src/common/trigger.c b/src/common/trigger.c index 132fda138..55ab99729 100644 --- a/src/common/trigger.c +++ b/src/common/trigger.c @@ -8,6 +8,7 @@ #include #include #include +#include #include #include #include @@ -83,11 +84,10 @@ struct lttng_condition *lttng_trigger_get_condition( return trigger ? trigger->condition : NULL; } -LTTNG_HIDDEN const struct lttng_condition *lttng_trigger_get_const_condition( const struct lttng_trigger *trigger) { - return trigger->condition; + return trigger ? trigger->condition : NULL; } @@ -102,11 +102,10 @@ struct lttng_action *lttng_trigger_get_action( return trigger ? trigger->action : NULL; } -LTTNG_HIDDEN const struct lttng_action *lttng_trigger_get_const_action( const struct lttng_trigger *trigger) { - return trigger->action; + return trigger ? trigger->action : NULL; } static void trigger_destroy_ref(struct urcu_ref *ref) @@ -928,3 +927,47 @@ enum lttng_domain_type lttng_trigger_get_underlying_domain_type_restriction( return type; } + +/* + * Generate bytecode related to the trigger. + * On success LTTNG_OK. On error, returns lttng_error code. + */ +LTTNG_HIDDEN +enum lttng_error_code lttng_trigger_generate_bytecode( + struct lttng_trigger *trigger, + const struct lttng_credentials *creds) +{ + enum lttng_error_code ret; + struct lttng_condition *condition = NULL; + + condition = lttng_trigger_get_condition(trigger); + if (!condition) { + ret = LTTNG_ERR_INVALID_TRIGGER; + goto end; + } + + switch (lttng_condition_get_type(condition)) { + case LTTNG_CONDITION_TYPE_EVENT_RULE_HIT: + { + struct lttng_event_rule *event_rule; + const enum lttng_condition_status condition_status = + lttng_condition_event_rule_borrow_rule_mutable( + condition, &event_rule); + + assert(condition_status == LTTNG_CONDITION_STATUS_OK); + ret = lttng_event_rule_generate_filter_bytecode( + event_rule, creds); + if (ret != LTTNG_OK) { + goto end; + } + + ret = LTTNG_OK; + break; + } + default: + ret = LTTNG_OK; + break; + } +end: + return ret; +}