[lttng-dev] [Patch LTTng-tools 2/4] Receive the CTF named enumerations from ust by the session daemon

Geneviève Bastien gbastien+lttng at versatic.net
Fri Jan 24 15:07:23 EST 2014


The session daemon can receive the named metadata coming with a tracepoint. The
named metadata come after the tracepoint description itself.

Signed-off-by: Geneviève Bastien <gbastien+lttng at versatic.net>
---
 src/bin/lttng-sessiond/lttng-ust-ctl.h |  4 +++-
 src/bin/lttng-sessiond/ust-app.c       | 13 +++++++++----
 src/bin/lttng-sessiond/ust-registry.c  |  8 +++++---
 src/bin/lttng-sessiond/ust-registry.h  |  6 +++++-
 4 files changed, 22 insertions(+), 9 deletions(-)

diff --git a/src/bin/lttng-sessiond/lttng-ust-ctl.h b/src/bin/lttng-sessiond/lttng-ust-ctl.h
index b5acd0f..d229b68 100644
--- a/src/bin/lttng-sessiond/lttng-ust-ctl.h
+++ b/src/bin/lttng-sessiond/lttng-ust-ctl.h
@@ -400,7 +400,9 @@ int ustctl_recv_register_event(int sock,
 					 */
 	size_t *nr_fields,
 	struct ustctl_field **fields,
-	char **model_emf_uri);
+	char **model_emf_uri,
+	size_t *nr_metadata,
+	struct ustctl_named_metadata **named_metadata);
 
 /*
  * Returns 0 on success, negative error value on error.
diff --git a/src/bin/lttng-sessiond/ust-app.c b/src/bin/lttng-sessiond/ust-app.c
index 34d4c9b..a27ebe0 100644
--- a/src/bin/lttng-sessiond/ust-app.c
+++ b/src/bin/lttng-sessiond/ust-app.c
@@ -4647,7 +4647,8 @@ error_rcu_unlock:
  */
 static int add_event_ust_registry(int sock, int sobjd, int cobjd, char *name,
 		char *sig, size_t nr_fields, struct ustctl_field *fields, int loglevel,
-		char *model_emf_uri)
+		char *model_emf_uri, size_t nr_metadata,
+		struct ustctl_named_metadata *named_metadata)
 {
 	int ret, ret_code;
 	uint32_t event_id = 0;
@@ -4704,7 +4705,7 @@ static int add_event_ust_registry(int sock, int sobjd, int cobjd, char *name,
 	ret_code = ust_registry_create_event(registry, chan_reg_key,
 			sobjd, cobjd, name, sig, nr_fields, fields, loglevel,
 			model_emf_uri, ua_sess->buffer_type, &event_id,
-			app);
+			app, nr_metadata, named_metadata);
 
 	/*
 	 * The return value is returned to ustctl so in case of an error, the
@@ -4764,11 +4765,14 @@ int ust_app_recv_notify(int sock)
 		char name[LTTNG_UST_SYM_NAME_LEN], *sig, *model_emf_uri;
 		size_t nr_fields;
 		struct ustctl_field *fields;
+		size_t nr_metadata;
+		struct ustctl_named_metadata *named_metadata;
 
 		DBG2("UST app ustctl register event received");
 
 		ret = ustctl_recv_register_event(sock, &sobjd, &cobjd, name, &loglevel,
-				&sig, &nr_fields, &fields, &model_emf_uri);
+				&sig, &nr_fields, &fields, &model_emf_uri, &nr_metadata,
+				&named_metadata);
 		if (ret < 0) {
 			if (ret != -EPIPE && ret != -LTTNG_UST_ERR_EXITING) {
 				ERR("UST app recv event failed with ret %d", ret);
@@ -4785,7 +4789,8 @@ int ust_app_recv_notify(int sock)
 		 * to the this function.
 		 */
 		ret = add_event_ust_registry(sock, sobjd, cobjd, name, sig, nr_fields,
-				fields, loglevel, model_emf_uri);
+				fields, loglevel, model_emf_uri, nr_metadata,
+				named_metadata);
 		if (ret < 0) {
 			goto error;
 		}
diff --git a/src/bin/lttng-sessiond/ust-registry.c b/src/bin/lttng-sessiond/ust-registry.c
index dc49416..00e1c26 100644
--- a/src/bin/lttng-sessiond/ust-registry.c
+++ b/src/bin/lttng-sessiond/ust-registry.c
@@ -133,7 +133,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, char *model_emf_uri,
-		struct ust_app *app)
+		struct ust_app *app, size_t nr_metadata, struct ustctl_named_metadata *named_metadata)
 {
 	struct ust_registry_event *event = NULL;
 
@@ -163,6 +163,8 @@ static struct ust_registry_event *alloc_event(int session_objd,
 		strncpy(event->name, name, sizeof(event->name));
 		event->name[sizeof(event->name) - 1] = '\0';
 	}
+	event->nr_metadata = nr_metadata;
+	event->named_metadata = named_metadata;
 	cds_lfht_node_init(&event->node.node);
 
 error:
@@ -249,7 +251,7 @@ 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, int loglevel,
 		char *model_emf_uri, int buffer_type, uint32_t *event_id_p,
-		struct ust_app *app)
+		struct ust_app *app, size_t nr_metadata, struct ustctl_named_metadata *named_metadata)
 {
 	int ret;
 	uint32_t event_id;
@@ -286,7 +288,7 @@ int ust_registry_create_event(struct ust_registry_session *session,
 	}
 
 	event = alloc_event(session_objd, channel_objd, name, sig, nr_fields,
-			fields, loglevel, model_emf_uri, app);
+			fields, loglevel, model_emf_uri, app, nr_metadata, named_metadata);
 	if (!event) {
 		ret = -ENOMEM;
 		goto error_free;
diff --git a/src/bin/lttng-sessiond/ust-registry.h b/src/bin/lttng-sessiond/ust-registry.h
index f195b74..183db0f 100644
--- a/src/bin/lttng-sessiond/ust-registry.h
+++ b/src/bin/lttng-sessiond/ust-registry.h
@@ -137,6 +137,9 @@ struct ust_registry_event {
 	 * initialize the node and the event_name/signature for the match function.
 	 */
 	struct lttng_ht_node_u64 node;
+	/* Named metadata needed by the event */
+	struct ustctl_named_metadata *named_metadata;
+	size_t nr_metadata;
 };
 
 /*
@@ -226,7 +229,8 @@ 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, int loglevel,
 		char *model_emf_uri, int buffer_type, uint32_t *event_id_p,
-		struct ust_app *app);
+		struct ust_app *app,
+		size_t nr_metadata, struct ustctl_named_metadata *named_metadata);
 struct ust_registry_event *ust_registry_find_event(
 		struct ust_registry_channel *chan, char *name, char *sig);
 void ust_registry_destroy_event(struct ust_registry_channel *chan,
-- 
1.8.5.3




More information about the lttng-dev mailing list