X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=src%2Fbin%2Flttng-sessiond%2Fust-app.c;h=f7d8c985babe03f67315abbbbd52662e9cdda301;hb=1136f41bfcb45da596fcb147b38b3181223f87e1;hp=0f8664cc3c65fd29471c1ef78786ddde8ee0fca7;hpb=44760c20f4fc255b63894ca758cf2ee5f253220b;p=lttng-tools.git diff --git a/src/bin/lttng-sessiond/ust-app.c b/src/bin/lttng-sessiond/ust-app.c index 0f8664cc3..f7d8c985b 100644 --- a/src/bin/lttng-sessiond/ust-app.c +++ b/src/bin/lttng-sessiond/ust-app.c @@ -18,6 +18,7 @@ #include #include +#include #include #include #include @@ -361,7 +362,7 @@ static void delete_ust_app_event_notifier_rule(int sock, free(ua_event_notifier_rule->obj); } - lttng_event_rule_put(ua_event_notifier_rule->event_rule); + lttng_trigger_put(ua_event_notifier_rule->trigger); call_rcu(&ua_event_notifier_rule->rcu_head, free_ust_app_event_notifier_rule_rcu); } @@ -1230,11 +1231,13 @@ error: * Allocate a new UST app event notifier rule. */ static struct ust_app_event_notifier_rule *alloc_ust_app_event_notifier_rule( - struct lttng_event_rule *event_rule, uint64_t token) + struct lttng_trigger *trigger) { enum lttng_event_rule_generate_exclusions_status generate_exclusion_status; struct ust_app_event_notifier_rule *ua_event_notifier_rule; + struct lttng_condition *condition = NULL; + const struct lttng_event_rule *event_rule = NULL; ua_event_notifier_rule = zmalloc(sizeof(struct ust_app_event_notifier_rule)); if (ua_event_notifier_rule == NULL) { @@ -1243,15 +1246,21 @@ static struct ust_app_event_notifier_rule *alloc_ust_app_event_notifier_rule( } ua_event_notifier_rule->enabled = 1; - ua_event_notifier_rule->token = token; - lttng_ht_node_init_u64(&ua_event_notifier_rule->node, token); + ua_event_notifier_rule->token = lttng_trigger_get_tracer_token(trigger); + lttng_ht_node_init_u64(&ua_event_notifier_rule->node, + ua_event_notifier_rule->token); - /* Get reference of the event rule. */ - if (!lttng_event_rule_get(event_rule)) { - abort(); - } + condition = lttng_trigger_get_condition(trigger); + assert(condition); + assert(lttng_condition_get_type(condition) == LTTNG_CONDITION_TYPE_EVENT_RULE_HIT); - ua_event_notifier_rule->event_rule = event_rule; + assert(LTTNG_CONDITION_STATUS_OK == lttng_condition_event_rule_get_rule(condition, &event_rule)); + assert(event_rule); + + /* Acquire the event notifier's reference to the trigger. */ + lttng_trigger_get(trigger); + + ua_event_notifier_rule->trigger = trigger; ua_event_notifier_rule->filter = lttng_event_rule_get_filter_bytecode(event_rule); generate_exclusion_status = lttng_event_rule_generate_exclusions( event_rule, &ua_event_notifier_rule->exclusion); @@ -1261,8 +1270,8 @@ static struct ust_app_event_notifier_rule *alloc_ust_app_event_notifier_rule( break; default: /* Error occured. */ - ERR("Failed to generate exclusions from event rule while allocating an event notifier rule"); - goto error_put_event_rule; + ERR("Failed to generate exclusions from trigger while allocating an event notifier rule"); + goto error_put_trigger; } DBG3("UST app event notifier rule allocated: token = %" PRIu64, @@ -1270,8 +1279,8 @@ static struct ust_app_event_notifier_rule *alloc_ust_app_event_notifier_rule( return ua_event_notifier_rule; -error_put_event_rule: - lttng_event_rule_put(event_rule); +error_put_trigger: + lttng_trigger_put(trigger); error: free(ua_event_notifier_rule); return NULL; @@ -1323,7 +1332,7 @@ error: * Return allocated filter or NULL on error. */ static struct lttng_ust_filter_bytecode *create_ust_bytecode_from_bytecode( - const struct lttng_filter_bytecode *orig_f) + const struct lttng_bytecode *orig_f) { struct lttng_ust_filter_bytecode *filter = NULL; @@ -1334,7 +1343,7 @@ static struct lttng_ust_filter_bytecode *create_ust_bytecode_from_bytecode( goto error; } - assert(sizeof(struct lttng_filter_bytecode) == + assert(sizeof(struct lttng_bytecode) == sizeof(struct lttng_ust_filter_bytecode)); memcpy(filter, orig_f, sizeof(*filter) + orig_f->len); error: @@ -1393,7 +1402,7 @@ error: * Return an ust_app_event object or NULL on error. */ static struct ust_app_event *find_ust_app_event(struct lttng_ht *ht, - const char *name, const struct lttng_filter_bytecode *filter, + const char *name, const struct lttng_bytecode *filter, int loglevel_value, const struct lttng_event_exclusion *exclusion) { @@ -1502,7 +1511,7 @@ error: * Set the filter on the tracer. */ static int set_ust_object_filter(struct ust_app *app, - const struct lttng_filter_bytecode *bytecode, + const struct lttng_bytecode *bytecode, struct lttng_ust_object_data *ust_object) { int ret; @@ -1993,19 +2002,25 @@ static int create_ust_event_notifier(struct ust_app *app, struct ust_app_event_notifier_rule *ua_event_notifier_rule) { int ret = 0; + enum lttng_condition_status condition_status; + const struct lttng_condition *condition = NULL; struct lttng_ust_event_notifier event_notifier; + const struct lttng_event_rule *event_rule = NULL; health_code_update(); assert(app->event_notifier_group.object); - ret = init_ust_event_notifier_from_event_rule( - ua_event_notifier_rule->event_rule, &event_notifier); - if (ret) { - ERR("Failed to initialize UST event notifier from event rule: app = '%s' (ppid: %d)", - app->name, app->ppid); - goto error; - } + condition = lttng_trigger_get_const_condition( + ua_event_notifier_rule->trigger); + assert(condition); + assert(lttng_condition_get_type(condition) == LTTNG_CONDITION_TYPE_EVENT_RULE_HIT); + condition_status = lttng_condition_event_rule_get_rule(condition, &event_rule); + assert(condition_status == LTTNG_CONDITION_STATUS_OK); + assert(event_rule); + assert(lttng_event_rule_get_type(event_rule) == LTTNG_EVENT_RULE_TYPE_TRACEPOINT); + + init_ust_event_notifier_from_event_rule(event_rule, &event_notifier); event_notifier.event.token = ua_event_notifier_rule->token; /* Create UST event notifier against the tracer. */ @@ -2111,7 +2126,7 @@ static void shadow_copy_event(struct ust_app_event *ua_event, /* Copy filter bytecode */ if (uevent->filter) { - ua_event->filter = lttng_filter_bytecode_copy(uevent->filter); + ua_event->filter = lttng_bytecode_copy(uevent->filter); /* Filter might be NULL here in case of ENONEM. */ } @@ -3521,13 +3536,13 @@ error: * Called with ust app session mutex held. */ static -int create_ust_app_event_notifier_rule(struct lttng_event_rule *rule, - struct ust_app *app, uint64_t token) +int create_ust_app_event_notifier_rule(struct lttng_trigger *trigger, + struct ust_app *app) { int ret = 0; struct ust_app_event_notifier_rule *ua_event_notifier_rule; - ua_event_notifier_rule = alloc_ust_app_event_notifier_rule(rule, token); + ua_event_notifier_rule = alloc_ust_app_event_notifier_rule(trigger); if (ua_event_notifier_rule == NULL) { ret = -ENOMEM; goto end; @@ -3545,7 +3560,7 @@ int create_ust_app_event_notifier_rule(struct lttng_event_rule *rule, if (ret == -LTTNG_UST_ERR_EXIST) { ERR("Tracer for application reported that an event notifier being created already exists: " "token = \"%" PRIu64 "\", pid = %d, ppid = %d, uid = %d, gid = %d", - token, + lttng_trigger_get_tracer_token(trigger), app->pid, app->ppid, app->uid, app->gid); } @@ -3556,7 +3571,7 @@ int create_ust_app_event_notifier_rule(struct lttng_event_rule *rule, &ua_event_notifier_rule->node); DBG2("UST app create token event rule completed: app = '%s' (ppid: %d), token = %" PRIu64, - app->name, app->ppid, token); + app->name, app->ppid, lttng_trigger_get_tracer_token(trigger)); end: return ret; @@ -5555,7 +5570,7 @@ void ust_app_synchronize_event_notifier_rules(struct ust_app *app) looked_up_event_notifier_rule = find_ust_app_event_notifier_rule( app->token_to_event_notifier_rule_ht, token); if (!looked_up_event_notifier_rule) { - ret = create_ust_app_event_notifier_rule(event_rule, app, token); + ret = create_ust_app_event_notifier_rule(trigger, app); if (ret < 0) { goto end; }