X-Git-Url: https://git.lttng.org/?p=lttng-tools.git;a=blobdiff_plain;f=src%2Fbin%2Flttng-sessiond%2Fust-registry.c;fp=src%2Fbin%2Flttng-sessiond%2Fust-registry.c;h=615078b66bd97793713ded0ee3cad8b95d86e242;hp=ed830b60821cc67154879c629655f48e7b62bf10;hb=98b73e886719378d507d500058dd4e4d7e5488bf;hpb=ab95d85d8784a545ff66c2025110829e9b5cb1b8 diff --git a/src/bin/lttng-sessiond/ust-registry.c b/src/bin/lttng-sessiond/ust-registry.c index ed830b608..615078b66 100644 --- a/src/bin/lttng-sessiond/ust-registry.c +++ b/src/bin/lttng-sessiond/ust-registry.c @@ -25,17 +25,20 @@ #include "ust-registry.h" #include "ust-app.h" +#include "ust-field-utils.h" #include "utils.h" #include "lttng-sessiond.h" #include "notification-thread-commands.h" + /* * Hash table match function for event in the registry. */ static int ht_match_event(struct cds_lfht_node *node, const void *_key) { - struct ust_registry_event *event; const struct ust_registry_event *key; + struct ust_registry_event *event; + int i; assert(node); assert(_key); @@ -44,15 +47,37 @@ static int ht_match_event(struct cds_lfht_node *node, const void *_key) assert(event); key = _key; - /* It has to be a perfect match. */ + /* It has to be a perfect match. First, compare the event names. */ if (strncmp(event->name, key->name, sizeof(event->name))) { goto no_match; } - /* It has to be a perfect match. */ - if (strncmp(event->signature, key->signature, - strlen(event->signature))) { + /* Compare log levels. */ + if (event->loglevel_value != key->loglevel_value) { + goto no_match; + } + + /* Compare the number of fields. */ + if (event->nr_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; + } else if(event->model_emf_uri == NULL && key->model_emf_uri != NULL) { goto no_match; + } else if (event->model_emf_uri != NULL && key->model_emf_uri != NULL) { + if (strcmp(event->model_emf_uri, key->model_emf_uri)) { + goto no_match; + } } /* Match */ @@ -64,15 +89,14 @@ no_match: static unsigned long ht_hash_event(const void *_key, unsigned long seed) { - uint64_t xored_key; + uint64_t hashed_key; const struct ust_registry_event *key = _key; assert(key); - xored_key = (uint64_t) (hash_key_str(key->name, seed) ^ - hash_key_str(key->signature, seed)); + hashed_key = (uint64_t) hash_key_str(key->name, seed); - return hash_key_u64(&xored_key, seed); + return hash_key_u64(&hashed_key, seed); } static int compare_enums(const struct ust_registry_enum *reg_enum_a,