X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=src%2Fbin%2Flttng-sessiond%2Fust-app.c;h=66b50eb43df98ea42c0700c5cedd5e9f28e17e8b;hb=df4f5a87a21110a5f9447bcfd7ffeb25098a5fd4;hp=8c9277cae225ea80e9df7bf106d304a529e71769;hpb=940c4592b53105b7c308f8e32b8da136b3d6533d;p=lttng-tools.git diff --git a/src/bin/lttng-sessiond/ust-app.c b/src/bin/lttng-sessiond/ust-app.c index 8c9277cae..66b50eb43 100644 --- a/src/bin/lttng-sessiond/ust-app.c +++ b/src/bin/lttng-sessiond/ust-app.c @@ -1993,7 +1993,8 @@ static int setup_buffer_reg_pid(struct ust_app_session *ua_sess, app->byte_order, app->version.major, app->version.minor, reg_pid->root_shm_path, reg_pid->shm_path, ua_sess->effective_credentials.uid, - ua_sess->effective_credentials.gid); + ua_sess->effective_credentials.gid, ua_sess->tracing_id, + app->uid); if (ret < 0) { /* * reg_pid->registry->reg.ust is NULL upon error, so we need to @@ -2060,7 +2061,8 @@ static int setup_buffer_reg_uid(struct ltt_ust_session *usess, app->uint64_t_alignment, app->long_alignment, app->byte_order, app->version.major, app->version.minor, reg_uid->root_shm_path, - reg_uid->shm_path, usess->uid, usess->gid); + reg_uid->shm_path, usess->uid, usess->gid, + ua_sess->tracing_id, app->uid); if (ret < 0) { /* * reg_uid->registry->reg.ust is NULL upon error, so we need to @@ -5883,7 +5885,7 @@ enum lttng_error_code ust_app_snapshot_record( enum lttng_error_code status = LTTNG_OK; struct lttng_ht_iter iter; struct ust_app *app; - char pathname[PATH_MAX]; + char *trace_path = NULL; assert(usess); assert(output); @@ -5898,6 +5900,7 @@ enum lttng_error_code ust_app_snapshot_record( cds_list_for_each_entry(reg, &usess->buffer_reg_uid_list, lnode) { struct buffer_reg_channel *reg_chan; struct consumer_socket *socket; + char pathname[PATH_MAX]; if (!reg->registry->reg.ust->metadata_key) { /* Skip since no metadata is present */ @@ -5925,14 +5928,20 @@ enum lttng_error_code ust_app_snapshot_record( status = LTTNG_ERR_INVALID; goto error; } - + /* Free path allowed on previous iteration. */ + free(trace_path); + trace_path = setup_channel_trace_path(usess->consumer, pathname); + if (!trace_path) { + status = LTTNG_ERR_INVALID; + goto error; + } /* Add the UST default trace dir to path. */ cds_lfht_for_each_entry(reg->registry->channels->ht, &iter.iter, reg_chan, node.node) { status = consumer_snapshot_channel(socket, reg_chan->consumer_key, output, 0, usess->uid, - usess->gid, pathname, wait, + usess->gid, trace_path, wait, nb_packets_per_stream); if (status != LTTNG_OK) { goto error; @@ -5940,7 +5949,7 @@ enum lttng_error_code ust_app_snapshot_record( } status = consumer_snapshot_channel(socket, reg->registry->reg.ust->metadata_key, output, 1, - usess->uid, usess->gid, pathname, wait, 0); + usess->uid, usess->gid, trace_path, wait, 0); if (status != LTTNG_OK) { goto error; } @@ -5955,6 +5964,7 @@ enum lttng_error_code ust_app_snapshot_record( struct ust_app_channel *ua_chan; struct ust_app_session *ua_sess; struct ust_registry_session *registry; + char pathname[PATH_MAX]; ua_sess = lookup_session_by_app(usess, app); if (!ua_sess) { @@ -5979,7 +5989,13 @@ enum lttng_error_code ust_app_snapshot_record( PERROR("snprintf snapshot path"); goto error; } - + /* Free path allowed on previous iteration. */ + free(trace_path); + trace_path = setup_channel_trace_path(usess->consumer, pathname); + if (!trace_path) { + status = LTTNG_ERR_INVALID; + goto error; + } cds_lfht_for_each_entry(ua_sess->channels->ht, &chan_iter.iter, ua_chan, node.node) { status = consumer_snapshot_channel(socket, @@ -5988,7 +6004,7 @@ enum lttng_error_code ust_app_snapshot_record( .uid, ua_sess->effective_credentials .gid, - pathname, wait, + trace_path, wait, nb_packets_per_stream); switch (status) { case LTTNG_OK: @@ -6009,7 +6025,7 @@ enum lttng_error_code ust_app_snapshot_record( registry->metadata_key, output, 1, ua_sess->effective_credentials.uid, ua_sess->effective_credentials.gid, - pathname, wait, 0); + trace_path, wait, 0); switch (status) { case LTTNG_OK: break; @@ -6027,6 +6043,7 @@ enum lttng_error_code ust_app_snapshot_record( } error: + free(trace_path); rcu_read_unlock(); return status; }