X-Git-Url: http://git.efficios.com/?p=lttng-tools.git;a=blobdiff_plain;f=src%2Fbin%2Flttng-sessiond%2Fcondition-internal.c;h=bde25ea73c0c0997167ffebdfce42b62cf40360f;hp=dc21ca3afbc5931a09850b5625e7784d3984b52b;hb=refs%2Fheads%2Fsow-2020-0002-rev2;hpb=11f6ce94d8fb73f017888681aaba5d7df55fc735 diff --git a/src/bin/lttng-sessiond/condition-internal.c b/src/bin/lttng-sessiond/condition-internal.c index dc21ca3af..bde25ea73 100644 --- a/src/bin/lttng-sessiond/condition-internal.c +++ b/src/bin/lttng-sessiond/condition-internal.c @@ -13,9 +13,10 @@ #include #include #include -#include -#include +#include +#include #include +#include #include "condition-internal.h" static @@ -95,7 +96,7 @@ unsigned long lttng_condition_session_rotation_hash( } static -unsigned long lttng_condition_event_rule_hash( +unsigned long lttng_condition_on_event_hash( const struct lttng_condition *condition) { unsigned long hash, condition_type; @@ -103,8 +104,7 @@ unsigned long lttng_condition_event_rule_hash( const struct lttng_event_rule *event_rule; condition_type = (unsigned long) condition->type; - - condition_status = lttng_condition_event_rule_get_rule(condition, + condition_status = lttng_condition_on_event_get_rule(condition, &event_rule); assert(condition_status == LTTNG_CONDITION_STATUS_OK); @@ -128,10 +128,41 @@ unsigned long lttng_condition_hash(const struct lttng_condition *condition) case LTTNG_CONDITION_TYPE_SESSION_ROTATION_ONGOING: case LTTNG_CONDITION_TYPE_SESSION_ROTATION_COMPLETED: return lttng_condition_session_rotation_hash(condition); - case LTTNG_CONDITION_TYPE_EVENT_RULE_HIT: - return lttng_condition_event_rule_hash(condition); + case LTTNG_CONDITION_TYPE_ON_EVENT: + return lttng_condition_on_event_hash(condition); default: //ERR("[notification-thread] Unexpected condition type caught"); abort(); } } + +LTTNG_HIDDEN +struct lttng_condition *lttng_condition_copy(const struct lttng_condition *condition) +{ + int ret; + struct lttng_payload copy_buffer; + struct lttng_condition *copy = NULL; + + lttng_payload_init(©_buffer); + + ret = lttng_condition_serialize(condition, ©_buffer); + if (ret < 0) { + goto end; + } + + { + struct lttng_payload_view view = + lttng_payload_view_from_payload( + ©_buffer, 0, -1); + ret = lttng_condition_create_from_payload( + &view, ©); + if (ret < 0) { + copy = NULL; + goto end; + } + } + +end: + lttng_payload_reset(©_buffer); + return copy; +}