The session daemon can receive the global type declarations coming with a
tracepoint. The global type declarations come after the tracepoint description
itself.

Signed-off-by: Geneviève Bastien <[email protected]>
---
 src/bin/lttng-sessiond/lttng-ust-ctl.h |  4 +++-
 src/bin/lttng-sessiond/ust-app.c       | 13 +++++++++----
 src/bin/lttng-sessiond/ust-registry.c  | 10 +++++++---
 src/bin/lttng-sessiond/ust-registry.h  |  6 +++++-
 4 files changed, 24 insertions(+), 9 deletions(-)

diff --git a/src/bin/lttng-sessiond/lttng-ust-ctl.h 
b/src/bin/lttng-sessiond/lttng-ust-ctl.h
index 41ed6c5..f52640d 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_global_type_decl,    /* global type declarations */
+       struct ustctl_global_type_decl **global_type_decl);
 
 /*
  * 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..e8015a1 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_global_type_decl,
+               struct ustctl_global_type_decl *global_type_decl)
 {
        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_global_type_decl, global_type_decl);
 
        /*
         * 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_global_type_decl;
+               struct ustctl_global_type_decl *global_type_decl;
 
                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_global_type_decl, &global_type_decl);
                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_global_type_decl, global_type_decl);
                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..281ea7c 100644
--- a/src/bin/lttng-sessiond/ust-registry.c
+++ b/src/bin/lttng-sessiond/ust-registry.c
@@ -133,7 +133,8 @@ 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_global_type_decl,
+               struct ustctl_global_type_decl *global_type_decl)
 {
        struct ust_registry_event *event = NULL;
 
@@ -163,6 +164,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_global_type_decl = nr_global_type_decl;
+       event->global_type_decl = global_type_decl;
        cds_lfht_node_init(&event->node.node);
 
 error:
@@ -249,7 +252,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_global_type_decl,
+               struct ustctl_global_type_decl *global_type_decl)
 {
        int ret;
        uint32_t event_id;
@@ -286,7 +290,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_global_type_decl, global_type_decl);
        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..8b41c2a 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;
+       /* Global type declarations needed by the event */
+       struct ustctl_global_type_decl *global_type_decl;
+       size_t nr_global_type_decl;
 };
 
 /*
@@ -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_global_type_decl,
+               struct ustctl_global_type_decl *global_type_decl);
 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.4


_______________________________________________
lttng-dev mailing list
[email protected]
http://lists.lttng.org/cgi-bin/mailman/listinfo/lttng-dev

Reply via email to