X-Git-Url: http://git.efficios.com/?p=lttng-tools.git;a=blobdiff_plain;f=src%2Fcommon%2Ftrigger.c;h=f47f76d5529a732a8f6e263d32a373d622ac1b92;hp=132fda138912ef8ac264f6452f274614c1b19eca;hb=58daac01d91347336f24e1fc1cacd4e7a3101e93;hpb=8e49ca127d75e09de47b55f171f250bf4b64f219 diff --git a/src/common/trigger.c b/src/common/trigger.c index 132fda138..f47f76d55 100644 --- a/src/common/trigger.c +++ b/src/common/trigger.c @@ -8,6 +8,7 @@ #include #include #include +#include #include #include #include @@ -928,3 +929,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; +}