X-Git-Url: https://git.lttng.org/?p=lttng-tools.git;a=blobdiff_plain;f=src%2Fcommon%2Factions%2Faction.c;h=a0347a34c66ee53abd7b1851bdc362b3fffe2c78;hp=7325a532c8ae15078ee9cc82907a8906dadfd1ed;hb=0c51e8f329cdd907761e34c3e4394200a56c6812;hpb=757c48a28258e64fe251b6803ccdba7898590d70 diff --git a/src/common/actions/action.c b/src/common/actions/action.c index 7325a532c..a0347a34c 100644 --- a/src/common/actions/action.c +++ b/src/common/actions/action.c @@ -8,6 +8,7 @@ #include #include #include +#include #include #include #include @@ -19,6 +20,8 @@ static const char *lttng_action_type_string(enum lttng_action_type action_type) switch (action_type) { case LTTNG_ACTION_TYPE_UNKNOWN: return "UNKNOWN"; + case LTTNG_ACTION_TYPE_GROUP: + return "GROUP"; case LTTNG_ACTION_TYPE_NOTIFY: return "NOTIFY"; case LTTNG_ACTION_TYPE_ROTATE_SESSION: @@ -55,6 +58,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 +66,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 @@ -154,6 +179,9 @@ ssize_t lttng_action_create_from_payload(struct lttng_payload_view *view, create_from_payload_cb = lttng_action_stop_session_create_from_payload; break; + case LTTNG_ACTION_TYPE_GROUP: + create_from_payload_cb = lttng_action_group_create_from_payload; + break; default: ERR("Failed to create action from payload, unhandled action type: action-type=%u (%s)", action_comm->action_type,