+struct lttng_event_enabler *lttng_event_enabler_create(
+ enum lttng_enabler_format_type format_type,
+ struct lttng_ust_abi_event *event_param,
+ struct lttng_channel *chan)
+{
+ struct lttng_event_enabler *event_enabler;
+
+ event_enabler = zmalloc(sizeof(*event_enabler));
+ if (!event_enabler)
+ return NULL;
+ event_enabler->base.format_type = format_type;
+ CDS_INIT_LIST_HEAD(&event_enabler->base.filter_bytecode_head);
+ CDS_INIT_LIST_HEAD(&event_enabler->base.excluder_head);
+ memcpy(&event_enabler->base.event_param, event_param,
+ sizeof(event_enabler->base.event_param));
+ event_enabler->chan = chan;
+ /* ctx left NULL */
+ event_enabler->base.enabled = 0;
+ cds_list_add(&event_enabler->node, &event_enabler->chan->session->priv->enablers_head);
+ lttng_session_lazy_sync_event_enablers(event_enabler->chan->session);
+
+ return event_enabler;
+}
+
+struct lttng_event_notifier_enabler *lttng_event_notifier_enabler_create(
+ struct lttng_event_notifier_group *event_notifier_group,
+ enum lttng_enabler_format_type format_type,
+ struct lttng_ust_abi_event_notifier *event_notifier_param)
+{
+ struct lttng_event_notifier_enabler *event_notifier_enabler;
+
+ event_notifier_enabler = zmalloc(sizeof(*event_notifier_enabler));
+ if (!event_notifier_enabler)
+ return NULL;
+ event_notifier_enabler->base.format_type = format_type;
+ CDS_INIT_LIST_HEAD(&event_notifier_enabler->base.filter_bytecode_head);
+ CDS_INIT_LIST_HEAD(&event_notifier_enabler->capture_bytecode_head);
+ CDS_INIT_LIST_HEAD(&event_notifier_enabler->base.excluder_head);
+
+ event_notifier_enabler->user_token = event_notifier_param->event.token;
+ event_notifier_enabler->error_counter_index = event_notifier_param->error_counter_index;
+ event_notifier_enabler->num_captures = 0;
+
+ memcpy(&event_notifier_enabler->base.event_param.name,
+ event_notifier_param->event.name,
+ sizeof(event_notifier_enabler->base.event_param.name));
+ event_notifier_enabler->base.event_param.instrumentation =
+ event_notifier_param->event.instrumentation;
+ event_notifier_enabler->base.event_param.loglevel =
+ event_notifier_param->event.loglevel;
+ event_notifier_enabler->base.event_param.loglevel_type =
+ event_notifier_param->event.loglevel_type;
+
+ event_notifier_enabler->base.enabled = 0;
+ event_notifier_enabler->group = event_notifier_group;
+
+ cds_list_add(&event_notifier_enabler->node,
+ &event_notifier_group->enablers_head);
+
+ lttng_event_notifier_group_sync_enablers(event_notifier_group);
+
+ return event_notifier_enabler;
+}
+
+int lttng_event_enabler_enable(struct lttng_event_enabler *event_enabler)
+{
+ lttng_event_enabler_as_enabler(event_enabler)->enabled = 1;
+ lttng_session_lazy_sync_event_enablers(event_enabler->chan->session);
+
+ return 0;
+}
+
+int lttng_event_enabler_disable(struct lttng_event_enabler *event_enabler)
+{
+ lttng_event_enabler_as_enabler(event_enabler)->enabled = 0;
+ lttng_session_lazy_sync_event_enablers(event_enabler->chan->session);
+
+ return 0;
+}
+