X-Git-Url: http://git.efficios.com/?p=lttng-tools.git;a=blobdiff_plain;f=src%2Fbin%2Flttng-sessiond%2Fcontext.c;h=8a43cb7c14e9ab5f336f867d8f88df6e7a71cf11;hp=a2f022886306ccb55e9c72a4751d896d6c3f9ae2;hb=df4f5a87a21110a5f9447bcfd7ffeb25098a5fd4;hpb=df3c77c8dbbd102718f7149b075ba026d70a9e27 diff --git a/src/bin/lttng-sessiond/context.c b/src/bin/lttng-sessiond/context.c index a2f022886..8a43cb7c1 100644 --- a/src/bin/lttng-sessiond/context.c +++ b/src/bin/lttng-sessiond/context.c @@ -55,6 +55,7 @@ static int add_kctx_all_channels(struct ltt_kernel_session *ksession, kctx_copy = trace_kernel_copy_context(kctx); if (!kctx_copy) { PERROR("zmalloc ltt_kernel_context"); + ret = -LTTNG_ERR_NOMEM; goto error; } @@ -106,7 +107,8 @@ error: */ static int add_uctx_to_channel(struct ltt_ust_session *usess, enum lttng_domain_type domain, - struct ltt_ust_channel *uchan, struct lttng_event_context *ctx) + struct ltt_ust_channel *uchan, + const struct lttng_event_context *ctx) { int ret; struct ltt_ust_context *uctx = NULL; @@ -118,7 +120,7 @@ static int add_uctx_to_channel(struct ltt_ust_session *usess, /* Check if context is duplicate */ cds_list_for_each_entry(uctx, &uchan->ctx_list, list) { if (trace_ust_match_context(uctx, ctx)) { - ret = -EEXIST; + ret = LTTNG_ERR_UST_CONTEXT_EXIST; goto duplicate; } } @@ -139,7 +141,7 @@ static int add_uctx_to_channel(struct ltt_ust_session *usess, if (!agt) { agt = agent_create(domain); if (!agt) { - ret = LTTNG_ERR_NOMEM; + ret = -LTTNG_ERR_NOMEM; goto error; } agent_add(agt, usess->agents); @@ -164,22 +166,23 @@ static int add_uctx_to_channel(struct ltt_ust_session *usess, /* Create ltt UST context */ uctx = trace_ust_create_context(ctx); if (uctx == NULL) { - ret = -EINVAL; - goto error; - } - - ret = ust_app_add_ctx_channel_glb(usess, uchan, uctx); - if (ret < 0) { + ret = LTTNG_ERR_UST_CONTEXT_INVAL; goto error; } - rcu_read_lock(); - /* Add ltt UST context node to ltt UST channel */ lttng_ht_add_ulong(uchan->ctx, &uctx->node); - rcu_read_unlock(); cds_list_add_tail(&uctx->list, &uchan->ctx_list); + if (!usess->active) { + goto end; + } + + ret = ust_app_add_ctx_channel_glb(usess, uchan, uctx); + if (ret < 0) { + goto error; + } +end: DBG("Context UST %d added to channel %s", uctx->ctx.ctx, uchan->name); return 0; @@ -194,7 +197,7 @@ duplicate: * Add kernel context to tracer. */ int context_kernel_add(struct ltt_kernel_session *ksession, - struct lttng_event_context *ctx, char *channel_name) + const struct lttng_event_context *ctx, char *channel_name) { int ret; struct ltt_kernel_channel *kchan; @@ -206,7 +209,7 @@ int context_kernel_add(struct ltt_kernel_session *ksession, kctx = trace_kernel_create_context(NULL); if (!kctx) { - ret = LTTNG_ERR_NOMEM; + ret = -LTTNG_ERR_NOMEM; goto error; } @@ -258,6 +261,12 @@ int context_kernel_add(struct ltt_kernel_session *ksession, case LTTNG_EVENT_CONTEXT_MIGRATABLE: kctx->ctx.ctx = LTTNG_KERNEL_CONTEXT_MIGRATABLE; break; + case LTTNG_EVENT_CONTEXT_CALLSTACK_KERNEL: + kctx->ctx.ctx = LTTNG_KERNEL_CONTEXT_CALLSTACK_KERNEL; + break; + case LTTNG_EVENT_CONTEXT_CALLSTACK_USER: + kctx->ctx.ctx = LTTNG_KERNEL_CONTEXT_CALLSTACK_USER; + break; default: ret = LTTNG_ERR_KERN_CONTEXT_FAIL; goto error; @@ -305,7 +314,8 @@ error: * Add UST context to tracer. */ int context_ust_add(struct ltt_ust_session *usess, - enum lttng_domain_type domain, struct lttng_event_context *ctx, + enum lttng_domain_type domain, + const struct lttng_event_context *ctx, char *channel_name) { int ret = LTTNG_OK; @@ -338,7 +348,7 @@ int context_ust_add(struct ltt_ust_session *usess, /* Add ctx all events, all channels */ cds_lfht_for_each_entry(chan_ht->ht, &iter.iter, uchan, node.node) { ret = add_uctx_to_channel(usess, domain, uchan, ctx); - if (ret < 0) { + if (ret) { ERR("Failed to add context to channel %s", uchan->name); continue; @@ -348,10 +358,10 @@ int context_ust_add(struct ltt_ust_session *usess, } switch (ret) { - case -EEXIST: - ret = LTTNG_ERR_UST_CONTEXT_EXIST; + case LTTNG_ERR_UST_CONTEXT_EXIST: break; case -ENOMEM: + case -LTTNG_ERR_NOMEM: ret = LTTNG_ERR_FATAL; break; case -EINVAL: @@ -361,7 +371,11 @@ int context_ust_add(struct ltt_ust_session *usess, ret = LTTNG_ERR_UNKNOWN_DOMAIN; break; default: - ret = LTTNG_OK; + if (ret != 0 && ret != LTTNG_OK) { + ret = ret > 0 ? ret : LTTNG_ERR_UNK; + } else { + ret = LTTNG_OK; + } break; }