#include "lttng-sessiond.h"
#include "notification-thread-commands.h"
-
/*
* Hash table match function for event in the registry.
*/
{
const struct ust_registry_event *key;
struct ust_registry_event *event;
- int i;
assert(node);
assert(_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;
}
}
- 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);
}