tracepoint: Refactor representation of nested types
[lttng-ust.git] / liblttng-ust / lttng-events.c
index 047759b796a8a91ddac3f83a46148273ff829581..825cd60ee21b0b58340f7358a8f52afdb8e1b64f 100644 (file)
@@ -318,7 +318,20 @@ int lttng_create_enum_check(const struct lttng_type *type,
                const struct lttng_enum_desc *enum_desc;
                int ret;
 
-               enum_desc = type->u.basic.enumeration.desc;
+               enum_desc = type->u.legacy.basic.enumeration.desc;
+               ret = lttng_enum_create(enum_desc, session);
+               if (ret && ret != -EEXIST) {
+                       DBG("Unable to create enum error: (%d)", ret);
+                       return ret;
+               }
+               break;
+       }
+       case atype_enum_nestable:
+       {
+               const struct lttng_enum_desc *enum_desc;
+               int ret;
+
+               enum_desc = type->u.enum_nestable.desc;
                ret = lttng_enum_create(enum_desc, session);
                if (ret && ret != -EEXIST) {
                        DBG("Unable to create enum error: (%d)", ret);
@@ -333,7 +346,7 @@ int lttng_create_enum_check(const struct lttng_type *type,
                int ret;
 
                tag_field_generic = lttng_ust_dynamic_type_tag_field();
-               enum_desc = tag_field_generic->type.u.basic.enumeration.desc;
+               enum_desc = tag_field_generic->type.u.enum_nestable.desc;
                ret = lttng_enum_create(enum_desc, session);
                if (ret && ret != -EEXIST) {
                        DBG("Unable to create enum error: (%d)", ret);
@@ -600,8 +613,6 @@ int lttng_event_create(const struct lttng_event_desc *desc,
                goto sessiond_register_error;
        }
 
-       /* Populate lttng_event structure before tracepoint registration. */
-       cmm_smp_wmb();
        cds_list_add(&event->node, &chan->session->events_head);
        cds_hlist_add_head(&event->hlist, head);
        return 0;
@@ -746,7 +757,8 @@ void lttng_create_event_if_missing(struct lttng_enabler *enabler)
         */
        cds_list_for_each_entry(probe_desc, probe_list, head) {
                for (i = 0; i < probe_desc->nr_events; i++) {
-                       int found = 0, ret;
+                       int ret;
+                       bool found = false;
                        struct cds_hlist_head *head;
                        struct cds_hlist_node *node;
                        const char *event_name;
@@ -766,8 +778,10 @@ void lttng_create_event_if_missing(struct lttng_enabler *enabler)
                        head = &session->events_ht.table[hash & (LTTNG_UST_EVENT_HT_SIZE - 1)];
                        cds_hlist_for_each_entry(event, node, head, hlist) {
                                if (event->desc == desc
-                                               && event->chan == enabler->chan)
-                                       found = 1;
+                                               && event->chan == enabler->chan) {
+                                       found = true;
+                                       break;
+                               }
                        }
                        if (found)
                                continue;
@@ -871,11 +885,16 @@ void lttng_probe_provider_unregister_events(struct lttng_probe_desc *provider_de
                                                struct lttng_enum *curr_enum;
 
                                                field = &(event->desc->fields[j]);
-                                               if (field->type.atype != atype_enum) {
+                                               switch (field->type.atype) {
+                                               case atype_enum:
+                                                       enum_desc = field->type.u.legacy.basic.enumeration.desc;
+                                                       break;
+                                               case atype_enum_nestable:
+                                                       enum_desc = field->type.u.enum_nestable.desc;
+                                                       break;
+                                               default:
                                                        continue;
                                                }
-
-                                               enum_desc = field->type.u.basic.enumeration.desc;
                                                curr_enum = lttng_ust_enum_get_from_desc(session, enum_desc);
                                                if (curr_enum) {
                                                        _lttng_enum_destroy(curr_enum);
This page took 0.024059 seconds and 4 git commands to generate.