X-Git-Url: https://git.lttng.org/?p=lttng-tools.git;a=blobdiff_plain;f=src%2Fcommon%2Factions%2Faction.c;h=1a541ce469efc22381f198261a484b9df7ee4f26;hp=c6b57b9cff5c7a50a42325b68b5d8e3175f27794;hb=c852ce4e1d4ab0028ecee333a3ffc83de32f44bf;hpb=c0a66c84b5b2484b75798aec7543b680b4d4ab6c diff --git a/src/common/actions/action.c b/src/common/actions/action.c index c6b57b9cf..1a541ce46 100644 --- a/src/common/actions/action.c +++ b/src/common/actions/action.c @@ -10,6 +10,7 @@ #include #include #include +#include #include #include @@ -22,6 +23,8 @@ static const char *lttng_action_type_string(enum lttng_action_type action_type) return "NOTIFY"; case LTTNG_ACTION_TYPE_ROTATE_SESSION: return "ROTATE_SESSION"; + case LTTNG_ACTION_TYPE_SNAPSHOT_SESSION: + return "SNAPSHOT_SESSION"; case LTTNG_ACTION_TYPE_START_SESSION: return "START_SESSION"; case LTTNG_ACTION_TYPE_STOP_SESSION: @@ -52,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; @@ -59,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 @@ -139,6 +164,10 @@ ssize_t lttng_action_create_from_payload(struct lttng_payload_view *view, create_from_payload_cb = lttng_action_rotate_session_create_from_payload; break; + case LTTNG_ACTION_TYPE_SNAPSHOT_SESSION: + create_from_payload_cb = + lttng_action_snapshot_session_create_from_payload; + break; case LTTNG_ACTION_TYPE_START_SESSION: create_from_payload_cb = lttng_action_start_session_create_from_payload;