X-Git-Url: https://git.lttng.org/?p=lttng-tools.git;a=blobdiff_plain;f=src%2Fcommon%2Fcondition.c;fp=src%2Fcommon%2Fcondition.c;h=427c49e093ec3c4621161d32f94eefba730e7bf7;hp=367f4a38b6b977045c3e97a7572d9e607f462ef8;hb=4655b864b310dca6b4346770351a0e6a261ba5a1;hpb=58cd719683b1cbc3a5467a1ac258cc6194bc1790 diff --git a/src/common/condition.c b/src/common/condition.c index 367f4a38b..427c49e09 100644 --- a/src/common/condition.c +++ b/src/common/condition.c @@ -23,15 +23,36 @@ enum lttng_condition_type lttng_condition_get_type( } void lttng_condition_destroy(struct lttng_condition *condition) +{ + lttng_condition_put(condition); +} + +static void condition_destroy_ref(struct urcu_ref *ref) +{ + struct lttng_condition *condition = + container_of(ref, struct lttng_condition, ref); + + condition->destroy(condition); +} + +LTTNG_HIDDEN +void lttng_condition_get(struct lttng_condition *condition) +{ + urcu_ref_get(&condition->ref); +} + +LTTNG_HIDDEN +void lttng_condition_put(struct lttng_condition *condition) { if (!condition) { return; } assert(condition->destroy); - condition->destroy(condition); + urcu_ref_put(&condition->ref, condition_destroy_ref); } + LTTNG_HIDDEN bool lttng_condition_validate(const struct lttng_condition *condition) { @@ -171,4 +192,5 @@ void lttng_condition_init(struct lttng_condition *condition, enum lttng_condition_type type) { condition->type = type; + urcu_ref_init(&condition->ref); }