X-Git-Url: http://git.lttng.org/?a=blobdiff_plain;f=libust%2Fltt-context.c;h=90747a5592f5e14a5322fb3485067acc1cfa5bdd;hb=4318ae1be57eb7983ab4857a7a8eeb4a030a8216;hp=402f0c48ef4ba6337d6ffee989de7282aa89b906;hpb=a0a748b81a17573ce2adbc4441b231371cf76849;p=lttng-ust.git diff --git a/libust/ltt-context.c b/libust/ltt-context.c index 402f0c48..90747a55 100644 --- a/libust/ltt-context.c +++ b/libust/ltt-context.c @@ -3,18 +3,30 @@ * * Copyright 2011 (c) - Mathieu Desnoyers * - * LTTng trace/channel/event context management. + * LTTng UST trace/channel/event context management. * * Dual LGPL v2.1/GPL v2 license. */ -#include -#include -#include -#include -#include "wrapper/vmalloc.h" /* for wrapper_vmalloc_sync_all() */ -#include "ltt-events.h" -#include "ltt-tracer.h" +#include +#include +#include +#include +#include + +int lttng_find_context(struct lttng_ctx *ctx, const char *name) +{ + unsigned int i; + + for (i = 0; i < ctx->nr_fields; i++) { + /* Skip allocated (but non-initialized) contexts */ + if (!ctx->fields[i].event_field.name) + continue; + if (!strcmp(ctx->fields[i].event_field.name, name)) + return 1; + } + return 0; +} /* * Note: as we append context information, the pointer location may change. @@ -25,7 +37,7 @@ struct lttng_ctx_field *lttng_append_context(struct lttng_ctx **ctx_p) struct lttng_ctx *ctx; if (!*ctx_p) { - *ctx_p = kzalloc(sizeof(struct lttng_ctx), GFP_KERNEL); + *ctx_p = zmalloc(sizeof(struct lttng_ctx)); if (!*ctx_p) return NULL; } @@ -34,19 +46,18 @@ struct lttng_ctx_field *lttng_append_context(struct lttng_ctx **ctx_p) struct lttng_ctx_field *new_fields; ctx->allocated_fields = max_t(size_t, 1, 2 * ctx->allocated_fields); - new_fields = kzalloc(ctx->allocated_fields * sizeof(struct lttng_ctx_field), GFP_KERNEL); + new_fields = zmalloc(ctx->allocated_fields * sizeof(struct lttng_ctx_field)); if (!new_fields) return NULL; if (ctx->fields) memcpy(new_fields, ctx->fields, sizeof(*ctx->fields) * ctx->nr_fields); - kfree(ctx->fields); + free(ctx->fields); ctx->fields = new_fields; } field = &ctx->fields[ctx->nr_fields]; ctx->nr_fields++; return field; } -EXPORT_SYMBOL_GPL(lttng_append_context); /* * Remove last context field. @@ -58,10 +69,9 @@ void lttng_remove_context_field(struct lttng_ctx **ctx_p, ctx = *ctx_p; ctx->nr_fields--; - WARN_ON_ONCE(&ctx->fields[ctx->nr_fields] != field); + assert(&ctx->fields[ctx->nr_fields] == field); memset(&ctx->fields[ctx->nr_fields], 0, sizeof(struct lttng_ctx_field)); } -EXPORT_SYMBOL_GPL(lttng_remove_context_field); void lttng_destroy_context(struct lttng_ctx *ctx) { @@ -73,6 +83,6 @@ void lttng_destroy_context(struct lttng_ctx *ctx) if (ctx->fields[i].destroy) ctx->fields[i].destroy(&ctx->fields[i]); } - kfree(ctx->fields); - kfree(ctx); + free(ctx->fields); + free(ctx); }