X-Git-Url: https://git.liburcu.org/?a=blobdiff_plain;f=src%2Fbin%2Flttng-sessiond%2Fust-registry.c;h=a5ce004de23bffa1e9168e20889435eb415e9cf2;hb=28dc0326d832142a7b5fe5e31d4ebb5d8c5d745a;hp=2e33b9575f9d1e298af8eb539c510997c2e1588c;hpb=0d32d1a95331da3baf00ad1eb7be907129c6a9db;p=lttng-tools.git diff --git a/src/bin/lttng-sessiond/ust-registry.c b/src/bin/lttng-sessiond/ust-registry.c index 2e33b9575..a5ce004de 100644 --- a/src/bin/lttng-sessiond/ust-registry.c +++ b/src/bin/lttng-sessiond/ust-registry.c @@ -20,7 +20,6 @@ #include "lttng-sessiond.h" #include "notification-thread-commands.h" - /* * Hash table match function for event in the registry. */ @@ -28,7 +27,6 @@ static int ht_match_event(struct cds_lfht_node *node, const void *_key) { const struct ust_registry_event *key; struct ust_registry_event *event; - int i; assert(node); assert(_key); @@ -47,18 +45,12 @@ static int ht_match_event(struct cds_lfht_node *node, const void *_key) goto no_match; } - /* Compare the number of fields. */ - if (event->nr_fields != key->nr_fields) { + /* Compare the arrays of fields. */ + if (!match_lttng_ust_ctl_field_array(event->fields, event->nr_fields, + key->fields, key->nr_fields)) { goto no_match; } - /* Compare each field individually. */ - for (i = 0; i < event->nr_fields; i++) { - if (!match_ustctl_field(&event->fields[i], &key->fields[i])) { - goto no_match; - } - } - /* Compare model URI. */ if (event->model_emf_uri != NULL && key->model_emf_uri == NULL) { goto no_match; @@ -101,7 +93,7 @@ static int compare_enums(const struct ust_registry_enum *reg_enum_a, goto end; } for (i = 0; i < reg_enum_a->nr_entries; i++) { - const struct ustctl_enum_entry *entries_a, *entries_b; + const struct lttng_ust_ctl_enum_entry *entries_a, *entries_b; entries_a = ®_enum_a->entries[i]; entries_b = ®_enum_b->entries[i]; @@ -149,7 +141,7 @@ static int ht_match_enum(struct cds_lfht_node *node, const void *_key) assert(_enum); key = _key; - if (strncmp(_enum->name, key->name, LTTNG_UST_SYM_NAME_LEN)) { + if (strncmp(_enum->name, key->name, LTTNG_UST_ABI_SYM_NAME_LEN)) { goto no_match; } if (compare_enums(_enum, key)) { @@ -209,32 +201,32 @@ static unsigned long ht_hash_enum(void *_key, unsigned long seed) * trace reader. */ static -int validate_event_field(struct ustctl_field *field, +int validate_event_field(struct lttng_ust_ctl_field *field, const char *event_name, struct ust_app *app) { int ret = 0; switch(field->type.atype) { - case ustctl_atype_integer: - case ustctl_atype_enum: - case ustctl_atype_array: - case ustctl_atype_sequence: - case ustctl_atype_string: - case ustctl_atype_variant: - case ustctl_atype_array_nestable: - case ustctl_atype_sequence_nestable: - case ustctl_atype_enum_nestable: - case ustctl_atype_variant_nestable: + case lttng_ust_ctl_atype_integer: + case lttng_ust_ctl_atype_enum: + case lttng_ust_ctl_atype_array: + case lttng_ust_ctl_atype_sequence: + case lttng_ust_ctl_atype_string: + case lttng_ust_ctl_atype_variant: + case lttng_ust_ctl_atype_array_nestable: + case lttng_ust_ctl_atype_sequence_nestable: + case lttng_ust_ctl_atype_enum_nestable: + case lttng_ust_ctl_atype_variant_nestable: break; - case ustctl_atype_struct: + case lttng_ust_ctl_atype_struct: if (field->type.u.legacy._struct.nr_fields != 0) { WARN("Unsupported non-empty struct field."); ret = -EINVAL; goto end; } break; - case ustctl_atype_struct_nestable: + case lttng_ust_ctl_atype_struct_nestable: if (field->type.u.struct_nestable.nr_fields != 0) { WARN("Unsupported non-empty struct field."); ret = -EINVAL; @@ -242,7 +234,7 @@ int validate_event_field(struct ustctl_field *field, } break; - case ustctl_atype_float: + case lttng_ust_ctl_atype_float: switch (field->type.u._float.mant_dig) { case 0: WARN("UST application '%s' (pid: %d) has unknown float mantissa '%u' " @@ -267,7 +259,7 @@ end: } static -int validate_event_fields(size_t nr_fields, struct ustctl_field *fields, +int validate_event_fields(size_t nr_fields, struct lttng_ust_ctl_field *fields, const char *event_name, struct ust_app *app) { unsigned int i; @@ -285,7 +277,7 @@ int validate_event_fields(size_t nr_fields, struct ustctl_field *fields, */ static struct ust_registry_event *alloc_event(int session_objd, int channel_objd, char *name, char *sig, size_t nr_fields, - struct ustctl_field *fields, int loglevel_value, + struct lttng_ust_ctl_field *fields, int loglevel_value, char *model_emf_uri, struct ust_app *app) { struct ust_registry_event *event = NULL; @@ -400,7 +392,7 @@ end: */ int ust_registry_create_event(struct ust_registry_session *session, uint64_t chan_key, int session_objd, int channel_objd, char *name, - char *sig, size_t nr_fields, struct ustctl_field *fields, + char *sig, size_t nr_fields, struct lttng_ust_ctl_field *fields, int loglevel_value, char *model_emf_uri, int buffer_type, uint32_t *event_id_p, struct ust_app *app) { @@ -584,8 +576,8 @@ struct ust_registry_enum * struct ust_registry_enum reg_enum_lookup; memset(®_enum_lookup, 0, sizeof(reg_enum_lookup)); - strncpy(reg_enum_lookup.name, enum_name, LTTNG_UST_SYM_NAME_LEN); - reg_enum_lookup.name[LTTNG_UST_SYM_NAME_LEN - 1] = '\0'; + strncpy(reg_enum_lookup.name, enum_name, LTTNG_UST_ABI_SYM_NAME_LEN); + reg_enum_lookup.name[LTTNG_UST_ABI_SYM_NAME_LEN - 1] = '\0'; reg_enum_lookup.id = enum_id; cds_lfht_lookup(session->enums->ht, ht_hash_enum((void *) ®_enum_lookup, lttng_ht_seed), @@ -611,7 +603,7 @@ end: */ int ust_registry_create_or_find_enum(struct ust_registry_session *session, int session_objd, char *enum_name, - struct ustctl_enum_entry *entries, size_t nr_entries, + struct lttng_ust_ctl_enum_entry *entries, size_t nr_entries, uint64_t *enum_id) { int ret = 0; @@ -639,8 +631,8 @@ int ust_registry_create_or_find_enum(struct ust_registry_session *session, ret = -ENOMEM; goto end; } - strncpy(reg_enum->name, enum_name, LTTNG_UST_SYM_NAME_LEN); - reg_enum->name[LTTNG_UST_SYM_NAME_LEN - 1] = '\0'; + strncpy(reg_enum->name, enum_name, LTTNG_UST_ABI_SYM_NAME_LEN); + reg_enum->name[LTTNG_UST_ABI_SYM_NAME_LEN - 1] = '\0'; /* entries will be owned by reg_enum. */ reg_enum->entries = entries; reg_enum->nr_entries = nr_entries; @@ -732,20 +724,23 @@ static void destroy_channel(struct ust_registry_channel *chan, bool notif) if (notif) { cmd_ret = notification_thread_command_remove_channel( - notification_thread_handle, chan->consumer_key, - LTTNG_DOMAIN_UST); + the_notification_thread_handle, + chan->consumer_key, LTTNG_DOMAIN_UST); if (cmd_ret != LTTNG_OK) { ERR("Failed to remove channel from notification thread"); } } - rcu_read_lock(); - /* Destroy all event associated with this registry. */ - cds_lfht_for_each_entry(chan->ht->ht, &iter.iter, event, node.node) { - /* Delete the node from the ht and free it. */ - ust_registry_destroy_event(chan, event); + if (chan->ht) { + rcu_read_lock(); + /* Destroy all event associated with this registry. */ + cds_lfht_for_each_entry( + chan->ht->ht, &iter.iter, event, node.node) { + /* Delete the node from the ht and free it. */ + ust_registry_destroy_event(chan, event); + } + rcu_read_unlock(); } - rcu_read_unlock(); call_rcu(&chan->rcu_head, destroy_channel_rcu); }