X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=src%2Fcommon%2Ftrigger.c;h=71162e79bad63154b070b323ef75560ae89a72aa;hb=e957bf98e634c79b13281d0a2fe144be0245d310;hp=55ab99729c338259d72476e1a8074d12b9e5f43f;hpb=0de2479d5f5a287d31c69e34ea5202a69019f224;p=lttng-tools.git diff --git a/src/common/trigger.c b/src/common/trigger.c index 55ab99729..71162e79b 100644 --- a/src/common/trigger.c +++ b/src/common/trigger.c @@ -7,10 +7,12 @@ #include #include +#include #include #include #include #include +#include #include #include #include @@ -23,7 +25,7 @@ #include LTTNG_HIDDEN -bool lttng_trigger_validate(struct lttng_trigger *trigger) +bool lttng_trigger_validate(const struct lttng_trigger *trigger) { bool valid; @@ -955,12 +957,21 @@ enum lttng_error_code lttng_trigger_generate_bytecode( condition, &event_rule); assert(condition_status == LTTNG_CONDITION_STATUS_OK); + + /* Generate the filter bytecode. */ ret = lttng_event_rule_generate_filter_bytecode( event_rule, creds); if (ret != LTTNG_OK) { goto end; } + /* Generate the capture bytecode. */ + ret = lttng_condition_event_rule_generate_capture_descriptor_bytecode( + condition); + if (ret != LTTNG_OK) { + goto end; + } + ret = LTTNG_OK; break; } @@ -971,3 +982,34 @@ enum lttng_error_code lttng_trigger_generate_bytecode( end: return ret; } + +LTTNG_HIDDEN +struct lttng_trigger *lttng_trigger_copy(const struct lttng_trigger *trigger) +{ + int ret; + struct lttng_payload copy_buffer; + struct lttng_trigger *copy = NULL; + + lttng_payload_init(©_buffer); + + ret = lttng_trigger_serialize(trigger, ©_buffer); + if (ret < 0) { + goto end; + } + + { + struct lttng_payload_view view = + lttng_payload_view_from_payload( + ©_buffer, 0, -1); + ret = lttng_trigger_create_from_payload( + &view, ©); + if (ret < 0) { + copy = NULL; + goto end; + } + } + +end: + lttng_payload_reset(©_buffer); + return copy; +}