X-Git-Url: http://git.lttng.org/?a=blobdiff_plain;f=src%2Flib%2Flttng-ust%2Flttng-context-provider.c;h=4e7e429fcc6ee662c744cd94a818eca68d01eb5f;hb=a5d437c5f61a1b089e3ea76e4d124683b3aa456e;hp=796a6b49a3183dbb9ddf73a89710749a2155d310;hpb=a9fd951a21f28704ffdfd4217766f725a217208b;p=lttng-ust.git diff --git a/src/lib/lttng-ust/lttng-context-provider.c b/src/lib/lttng-ust/lttng-context-provider.c index 796a6b49..4e7e429f 100644 --- a/src/lib/lttng-ust/lttng-context-provider.c +++ b/src/lib/lttng-ust/lttng-context-provider.c @@ -19,6 +19,7 @@ #include "common/jhash.h" #include "context-provider-internal.h" #include "common/macros.h" +#include "common/tracer.h" struct lttng_ust_registered_context_provider { const struct lttng_ust_context_provider *provider; @@ -26,12 +27,6 @@ struct lttng_ust_registered_context_provider { struct cds_hlist_node node; }; -struct lttng_ust_app_ctx { - char *name; - struct lttng_ust_event_field *event_field; - struct lttng_ust_type_common *type; -}; - #define CONTEXT_PROVIDER_HT_BITS 12 #define CONTEXT_PROVIDER_HT_SIZE (1U << CONTEXT_PROVIDER_HT_BITS) struct context_provider_ht { @@ -94,11 +89,11 @@ struct lttng_ust_registered_context_provider *lttng_ust_context_provider_registe lttng_ust_context_set_session_provider(provider->name, provider->get_size, provider->record, - provider->get_value, provider->priv); + provider->get_value); lttng_ust_context_set_event_notifier_group_provider(provider->name, provider->get_size, provider->record, - provider->get_value, provider->priv); + provider->get_value); end: ust_unlock(); return reg_provider; @@ -112,11 +107,11 @@ void lttng_ust_context_provider_unregister(struct lttng_ust_registered_context_p goto end; lttng_ust_context_set_session_provider(reg_provider->provider->name, lttng_ust_dummy_get_size, lttng_ust_dummy_record, - lttng_ust_dummy_get_value, NULL); + lttng_ust_dummy_get_value); lttng_ust_context_set_event_notifier_group_provider(reg_provider->provider->name, lttng_ust_dummy_get_size, lttng_ust_dummy_record, - lttng_ust_dummy_get_value, NULL); + lttng_ust_dummy_get_value); cds_hlist_del(®_provider->node); end: @@ -124,16 +119,20 @@ end: free(reg_provider); } -static void destroy_app_ctx(void *priv) +static +void app_context_destroy(void *priv) { - struct lttng_ust_app_ctx *app_ctx = (struct lttng_ust_app_ctx *) priv; + struct lttng_ust_app_context *app_ctx = (struct lttng_ust_app_context *) priv; - free(app_ctx->name); + free(app_ctx->ctx_name); free(app_ctx->event_field); - free(app_ctx->type); - free(app_ctx); } +static +const struct lttng_ust_type_common app_ctx_type = { + .type = lttng_ust_type_dynamic, +}; + /* * Called with ust mutex held. * Add application context to array of context, even if the application @@ -148,8 +147,7 @@ int lttng_ust_add_app_context_to_ctx_rcu(const char *name, const struct lttng_ust_context_provider *provider; struct lttng_ust_ctx_field new_field = { 0 }; struct lttng_ust_event_field *event_field = NULL; - struct lttng_ust_type_common *type = NULL; - struct lttng_ust_app_ctx *app_ctx = NULL; + struct lttng_ust_app_context *app_ctx = NULL; char *ctx_name; int ret; @@ -165,19 +163,17 @@ int lttng_ust_add_app_context_to_ctx_rcu(const char *name, ret = -ENOMEM; goto error_field_name_alloc; } - type = zmalloc(sizeof(struct lttng_ust_type_common)); - if (!type) { - ret = -ENOMEM; - goto error_field_type_alloc; - } - app_ctx = zmalloc(sizeof(struct lttng_ust_app_ctx)); + app_ctx = zmalloc(sizeof(struct lttng_ust_app_context)); if (!app_ctx) { ret = -ENOMEM; goto error_app_ctx_alloc; } + app_ctx->struct_size = sizeof(struct lttng_ust_app_context); + app_ctx->event_field = event_field; + app_ctx->ctx_name = ctx_name; + event_field->name = ctx_name; - type->type = lttng_ust_type_dynamic; - event_field->type = type; + event_field->type = &app_ctx_type; new_field.event_field = event_field; /* * If provider is not found, we add the context anyway, but @@ -193,22 +189,21 @@ int lttng_ust_add_app_context_to_ctx_rcu(const char *name, new_field.record = lttng_ust_dummy_record; new_field.get_value = lttng_ust_dummy_get_value; } - new_field.destroy = destroy_app_ctx; new_field.priv = app_ctx; + new_field.destroy = app_context_destroy; /* * For application context, add it by expanding * ctx array. */ ret = lttng_ust_context_append_rcu(ctx, &new_field); if (ret) { - destroy_app_ctx(app_ctx); - return ret; + goto error_append; } return 0; +error_append: + free(app_ctx); error_app_ctx_alloc: - free(type); -error_field_type_alloc: free(ctx_name); error_field_name_alloc: free(event_field);