X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;ds=inline;f=src%2Fbin%2Flttng-sessiond%2Fcontext.c;h=1b87df2e90ab03a3d95192a5afc102fc21404397;hb=edb62ef53ad89e90b560efdd69d3d1302e9138a3;hp=46e1b344612e1f8af58a1117ec214c112b0a05b3;hpb=2223c96f0eecce28fe221eb19de4333156492337;p=lttng-tools.git diff --git a/src/bin/lttng-sessiond/context.c b/src/bin/lttng-sessiond/context.c index 46e1b3446..1b87df2e9 100644 --- a/src/bin/lttng-sessiond/context.c +++ b/src/bin/lttng-sessiond/context.c @@ -92,13 +92,19 @@ static int add_uctx_to_channel(struct ltt_ust_session *usess, int domain, { int ret; struct ltt_ust_context *uctx; - struct lttng_ht_iter iter; - struct lttng_ht_node_ulong *uctx_node; assert(usess); assert(uchan); assert(ctx); + /* Check if context is duplicate */ + cds_list_for_each_entry(uctx, &uchan->ctx_list, list) { + if (trace_ust_match_context(uctx, ctx)) { + ret = -EEXIST; + goto duplicate; + } + } + /* Create ltt UST context */ uctx = trace_ust_create_context(ctx); if (uctx == NULL) { @@ -120,18 +126,10 @@ static int add_uctx_to_channel(struct ltt_ust_session *usess, int domain, rcu_read_lock(); - /* Lookup context before adding it */ - lttng_ht_lookup(uchan->ctx, (void *)((unsigned long)uctx->ctx.ctx), &iter); - uctx_node = lttng_ht_iter_get_node_ulong(&iter); - if (uctx_node != NULL) { - ret = -EEXIST; - rcu_read_unlock(); - goto error; - } - /* Add ltt UST context node to ltt UST channel */ - lttng_ht_add_unique_ulong(uchan->ctx, &uctx->node); + lttng_ht_add_ulong(uchan->ctx, &uctx->node); rcu_read_unlock(); + cds_list_add_tail(&uctx->list, &uchan->ctx_list); DBG("Context UST %d added to channel %s", uctx->ctx.ctx, uchan->name); @@ -139,6 +137,7 @@ static int add_uctx_to_channel(struct ltt_ust_session *usess, int domain, error: free(uctx); +duplicate: return ret; } @@ -161,9 +160,6 @@ int context_kernel_add(struct ltt_kernel_session *ksession, case LTTNG_EVENT_CONTEXT_PID: kctx.ctx = LTTNG_KERNEL_CONTEXT_PID; break; - case LTTNG_EVENT_CONTEXT_PERF_COUNTER: - kctx.ctx = LTTNG_KERNEL_CONTEXT_PERF_COUNTER; - break; case LTTNG_EVENT_CONTEXT_PROCNAME: kctx.ctx = LTTNG_KERNEL_CONTEXT_PROCNAME; break; @@ -191,6 +187,10 @@ int context_kernel_add(struct ltt_kernel_session *ksession, case LTTNG_EVENT_CONTEXT_HOSTNAME: kctx.ctx = LTTNG_KERNEL_CONTEXT_HOSTNAME; break; + case LTTNG_EVENT_CONTEXT_PERF_CPU_COUNTER: + case LTTNG_EVENT_CONTEXT_PERF_COUNTER: + kctx.ctx = LTTNG_KERNEL_CONTEXT_PERF_CPU_COUNTER; + break; default: return LTTNG_ERR_KERN_CONTEXT_FAIL; } @@ -201,7 +201,7 @@ int context_kernel_add(struct ltt_kernel_session *ksession, LTTNG_SYMBOL_NAME_LEN); kctx.u.perf_counter.name[LTTNG_SYMBOL_NAME_LEN - 1] = '\0'; - if (strlen(channel_name) == 0) { + if (*channel_name == '\0') { ret = add_kctx_all_channels(ksession, &kctx); if (ret != LTTNG_OK) { goto error; @@ -262,7 +262,7 @@ int context_ust_add(struct ltt_ust_session *usess, int domain, } /* Get UST channel if defined */ - if (strlen(channel_name) != 0) { + if (channel_name[0] != '\0') { uchan = trace_ust_find_channel_by_name(chan_ht, channel_name); if (uchan == NULL) { ret = LTTNG_ERR_UST_CHAN_NOT_FOUND;