From 1804b6153d4cba1bc1152b58497e981a1140caa9 Mon Sep 17 00:00:00 2001 From: Francis Deslauriers Date: Tue, 30 May 2017 11:50:18 -0400 Subject: [PATCH] Compute variable sized context length Signed-off-by: Francis Deslauriers Signed-off-by: Mathieu Desnoyers --- lttng-ring-buffer-client.h | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/lttng-ring-buffer-client.h b/lttng-ring-buffer-client.h index 48d30429..8b87db0d 100644 --- a/lttng-ring-buffer-client.h +++ b/lttng-ring-buffer-client.h @@ -100,7 +100,8 @@ size_t ctx_get_aligned_size(size_t offset, struct lttng_ctx *ctx, } static inline -void ctx_get_struct_size(struct lttng_ctx *ctx, size_t *ctx_len) +void ctx_get_struct_size(struct lttng_ctx *ctx, size_t *ctx_len, + struct lttng_channel *chan, struct lib_ring_buffer_ctx *bufctx) { int i; size_t offset = 0; @@ -109,8 +110,13 @@ void ctx_get_struct_size(struct lttng_ctx *ctx, size_t *ctx_len) *ctx_len = 0; return; } - for (i = 0; i < ctx->nr_fields; i++) - offset += ctx->fields[i].get_size(offset); + for (i = 0; i < ctx->nr_fields; i++) { + if (ctx->fields[i].get_size) + offset += ctx->fields[i].get_size(offset); + if (ctx->fields[i].get_size_arg) + offset += ctx->fields[i].get_size_arg(offset, + &ctx->fields[i], bufctx, chan); + } *ctx_len = offset; } @@ -631,8 +637,8 @@ int lttng_event_reserve(struct lib_ring_buffer_ctx *ctx, int ret, cpu; /* Compute internal size of context structures. */ - ctx_get_struct_size(lttng_chan->ctx, &client_ctx.packet_context_len); - ctx_get_struct_size(event->ctx, &client_ctx.event_context_len); + ctx_get_struct_size(lttng_chan->ctx, &client_ctx.packet_context_len, lttng_chan, ctx); + ctx_get_struct_size(event->ctx, &client_ctx.event_context_len, lttng_chan, ctx); cpu = lib_ring_buffer_get_cpu(&client_config); if (unlikely(cpu < 0)) -- 2.34.1