static void shadow_copy_session(struct ust_app_session *ua_sess,
struct ltt_ust_session *usess, struct ust_app *app)
{
- time_t rawtime;
struct tm *timeinfo;
char datetime[16];
int ret;
char tmp_shm_path[PATH_MAX];
- /* Get date and time for unique app path */
- time(&rawtime);
- timeinfo = localtime(&rawtime);
+ timeinfo = localtime(&app->registration_time);
strftime(datetime, sizeof(datetime), "%Y%m%d-%H%M%S", timeinfo);
DBG2("Shadow copy of session handle %d", ua_sess->handle);
app->byte_order, app->version.major,
app->version.minor, reg_pid->root_shm_path,
reg_pid->shm_path,
- ua_sess->euid, ua_sess->egid);
+ ua_sess->euid, ua_sess->egid, ua_sess->tracing_id, app->uid);
if (ret < 0) {
/*
* reg_pid->registry->reg.ust is NULL upon error, so we need to
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
assert(app);
assert(app->notify_sock >= 0);
+ app->registration_time = time(NULL);
+
rcu_read_lock();
/*
/* Create directories if consumer is LOCAL and has a path defined. */
if (usess->consumer->type == CONSUMER_DST_LOCAL &&
usess->consumer->dst.session_root_path[0] != '\0') {
- char *tmp_path;
+ char tmp_path[LTTNG_PATH_MAX];
- tmp_path = zmalloc(LTTNG_PATH_MAX);
- if (!tmp_path) {
- ERR("Alloc tmp_path");
- goto error_unlock;
- }
- ret = snprintf(tmp_path, LTTNG_PATH_MAX, "%s%s%s",
+ ret = snprintf(tmp_path, sizeof(tmp_path), "%s/%s%s",
usess->consumer->dst.session_root_path,
usess->consumer->chunk_path,
- usess->consumer->subdir);
- if (ret >= LTTNG_PATH_MAX) {
- ERR("Local destination path exceeds the maximal allowed length of %i bytes (needs %i bytes) with path = \"%s%s%s\"",
- LTTNG_PATH_MAX, ret,
+ usess->consumer->domain_subdir);
+ if (ret >= sizeof(tmp_path)) {
+ ERR("Local destination path exceeds the maximal allowed length of %zu bytes (needs %i bytes) with path = \"%s%s%s\"",
+ sizeof(tmp_path), ret,
usess->consumer->dst.session_root_path,
usess->consumer->chunk_path,
- usess->consumer->subdir);
- free(tmp_path);
+ usess->consumer->domain_subdir);
goto error_unlock;
}
tmp_path);
ret = run_as_mkdir_recursive(tmp_path, S_IRWXU | S_IRWXG,
ua_sess->euid, ua_sess->egid);
- free(tmp_path);
if (ret < 0) {
if (errno != EEXIST) {
ERR("Trace directory creation error");
ret = snprintf(pathname, sizeof(pathname),
DEFAULT_UST_TRACE_DIR "/" DEFAULT_UST_TRACE_UID_PATH,
reg->uid, reg->bits_per_long);
- if (ret < 0 || ret == sizeof(pathname)) {
+ if (ret < 0 || ret >= sizeof(pathname)) {
PERROR("Failed to format rotation path");
cmd_ret = LTTNG_ERR_INVALID;
goto error;
ret = snprintf(pathname, sizeof(pathname),
DEFAULT_UST_TRACE_DIR "/%s",
ua_sess->path);
- if (ret < 0 || ret == sizeof(pathname)) {
+ if (ret < 0 || ret >= sizeof(pathname)) {
PERROR("Failed to format rotation path");
cmd_ret = LTTNG_ERR_INVALID;
goto error;