X-Git-Url: http://git.liburcu.org/?a=blobdiff_plain;f=liblttng-ust%2Flttng-events.c;h=825cd60ee21b0b58340f7358a8f52afdb8e1b64f;hb=218deb69baab57ee2f6728eef18e84697f21197b;hp=047759b796a8a91ddac3f83a46148273ff829581;hpb=fca2f1916cd9f22f410d8f22b9a0720c978c2025;p=lttng-ust.git diff --git a/liblttng-ust/lttng-events.c b/liblttng-ust/lttng-events.c index 047759b7..825cd60e 100644 --- a/liblttng-ust/lttng-events.c +++ b/liblttng-ust/lttng-events.c @@ -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);