#define _LGPL_SOURCE
#include <inttypes.h>
-#include <common/common.h>
-#include <common/hashtable/utils.h>
+#include <common/common.hpp>
+#include <common/hashtable/utils.hpp>
#include <lttng/lttng.h>
-#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"
+#include "ust-registry.hpp"
+#include "ust-app.hpp"
+#include "ust-field-utils.hpp"
+#include "utils.hpp"
+#include "lttng-sessiond.hpp"
+#include "notification-thread-commands.hpp"
/*
* Hash table match function for event in the registry.
/*
* Free event data structure. This does NOT delete it from any hash table. It's
- * safe to pass a NULL pointer. This shoudl be called inside a call RCU if the
+ * safe to pass a NULL pointer. This should be called inside a call RCU if the
* event is previously deleted from a rcu hash table.
*/
static void destroy_event(struct ust_registry_event *event)
LTTNG_ASSERT(chan);
LTTNG_ASSERT(name);
LTTNG_ASSERT(sig);
+ ASSERT_RCU_READ_LOCKED();
/* Setup key for the match function. */
strncpy(key.name, name, sizeof(key.name));
LTTNG_ASSERT(chan);
LTTNG_ASSERT(event);
+ ASSERT_RCU_READ_LOCKED();
/* Delete the node first. */
iter.iter.node = &event->node.node;
struct lttng_ht_node_str *node;
struct lttng_ht_iter iter;
+ ASSERT_RCU_READ_LOCKED();
+
cds_lfht_lookup(session->enums->ht,
ht_hash_enum((void *) reg_enum_lookup, lttng_ht_seed),
ht_match_enum, reg_enum_lookup, &iter.iter);
struct lttng_ht_iter iter;
struct ust_registry_enum reg_enum_lookup;
+ ASSERT_RCU_READ_LOCKED();
+
memset(®_enum_lookup, 0, sizeof(reg_enum_lookup));
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';
LTTNG_ASSERT(reg_session);
LTTNG_ASSERT(reg_enum);
+ ASSERT_RCU_READ_LOCKED();
/* Delete the node first. */
iter.iter.node = ®_enum->node.node;
call_rcu(®_enum->rcu_head, destroy_enum_rcu);
}
-/*
- * We need to execute ht_destroy outside of RCU read-side critical
- * section and outside of call_rcu thread, so we postpone its execution
- * using ht_cleanup_push. It is simpler than to change the semantic of
- * the many callers of delete_ust_app_session().
- */
static
void destroy_channel_rcu(struct rcu_head *head)
{
caa_container_of(head, struct ust_registry_channel, rcu_head);
if (chan->ht) {
- ht_cleanup_push(chan->ht);
+ lttng_ht_destroy(chan->ht);
}
free(chan->ctx_fields);
free(chan);
LTTNG_ASSERT(session);
LTTNG_ASSERT(session->channels);
+ ASSERT_RCU_READ_LOCKED();
DBG3("UST registry channel finding key %" PRIu64, key);
destroy_channel(chan, true);
}
rcu_read_unlock();
- ht_cleanup_push(reg->channels);
+ lttng_ht_destroy(reg->channels);
}
free(reg->metadata);
ust_registry_destroy_enum(reg, reg_enum);
}
rcu_read_unlock();
- ht_cleanup_push(reg->enums);
+ lttng_ht_destroy(reg->enums);
}
}