X-Git-Url: https://git.lttng.org/?p=lttng-tools.git;a=blobdiff_plain;f=src%2Fcommon%2Factions%2Faction.c;h=1a541ce469efc22381f198261a484b9df7ee4f26;hp=7325a532c8ae15078ee9cc82907a8906dadfd1ed;hb=c852ce4e1d4ab0028ecee333a3ffc83de32f44bf;hpb=757c48a28258e64fe251b6803ccdba7898590d70 diff --git a/src/common/actions/action.c b/src/common/actions/action.c index 7325a532c..1a541ce46 100644 --- a/src/common/actions/action.c +++ b/src/common/actions/action.c @@ -55,6 +55,7 @@ void lttng_action_init( action_equal_cb equal, action_destroy_cb destroy) { + urcu_ref_init(&action->ref); action->type = type; action->validate = validate; action->serialize = serialize; @@ -62,14 +63,35 @@ void lttng_action_init( action->destroy = destroy; } -void lttng_action_destroy(struct lttng_action *action) +static +void action_destroy_ref(struct urcu_ref *ref) +{ + struct lttng_action *action = + container_of(ref, struct lttng_action, ref); + + action->destroy(action); +} + +LTTNG_HIDDEN +void lttng_action_get(struct lttng_action *action) +{ + urcu_ref_get(&action->ref); +} + +LTTNG_HIDDEN +void lttng_action_put(struct lttng_action *action) { if (!action) { return; } assert(action->destroy); - action->destroy(action); + urcu_ref_put(&action->ref, action_destroy_ref); +} + +void lttng_action_destroy(struct lttng_action *action) +{ + lttng_action_put(action); } LTTNG_HIDDEN