+
+ lum.u.context.ctx = ctx->ctx;
+ switch (ctx->ctx) {
+ case LTTNG_UST_CONTEXT_PERF_THREAD_COUNTER:
+ lum.u.context.u.perf_counter = ctx->u.perf_counter;
+ break;
+ case LTTNG_UST_CONTEXT_APP_CONTEXT:
+ {
+ size_t provider_name_len = strlen(
+ ctx->u.app_ctx.provider_name) + 1;
+ size_t ctx_name_len = strlen(ctx->u.app_ctx.ctx_name) + 1;
+
+ lum.u.context.u.app_ctx.provider_name_len = provider_name_len;
+ lum.u.context.u.app_ctx.ctx_name_len = ctx_name_len;
+
+ len = provider_name_len + ctx_name_len;
+ buf = zmalloc(len);
+ if (!buf) {
+ ret = -ENOMEM;
+ goto end;
+ }
+ memcpy(buf, ctx->u.app_ctx.provider_name,
+ provider_name_len);
+ memcpy(buf + provider_name_len, ctx->u.app_ctx.ctx_name,
+ ctx_name_len);
+ break;
+ }
+ default:
+ break;
+ }
+ ret = ustcomm_send_app_msg(sock, &lum);
+ if (ret)
+ goto end;
+ if (buf) {
+ /* send var len ctx_name */
+ ret = ustcomm_send_unix_sock(sock, buf, len);
+ if (ret < 0) {
+ goto end;
+ }
+ if (ret != len) {
+ ret = -EINVAL;
+ goto end;
+ }
+ }
+ ret = ustcomm_recv_app_reply(sock, &lur, lum.handle, lum.cmd);
+ if (ret < 0) {
+ goto end;