X-Git-Url: http://git.lttng.org./?a=blobdiff_plain;ds=inline;f=lttng-sessiond%2Fust-app.c;h=2bee4d90ab7626b7b51c314b67ef539d65441634;hb=477d7741a6555ba9d2ef0bbfc72fc7877cbbb869;hp=f23fd306b20bfd540861ce76ef33b27b0f4367e8;hpb=ba5d816ea3010aa4a2a205e3c594b5464f82291a;p=lttng-tools.git diff --git a/lttng-sessiond/ust-app.c b/lttng-sessiond/ust-app.c index f23fd306b..2bee4d90a 100644 --- a/lttng-sessiond/ust-app.c +++ b/lttng-sessiond/ust-app.c @@ -479,8 +479,11 @@ static void shadow_copy_channel(struct ust_app_channel *ua_chan, /* Copy all events from ltt ust channel to ust app channel */ cds_lfht_for_each_entry(uchan->events, &iter, uevent, node) { + struct cds_lfht_iter uiter; + ua_event_node = hashtable_lookup(ua_chan->events, - (void *) uevent->attr.name, strlen(uevent->attr.name), &iter); + (void *) uevent->attr.name, strlen(uevent->attr.name), + &uiter); if (ua_event_node == NULL) { DBG2("UST event %s not found on shadow copy channel", uevent->attr.name); @@ -500,24 +503,47 @@ static void shadow_copy_channel(struct ust_app_channel *ua_chan, * Copy data between a UST app session and a regular LTT session. */ static void shadow_copy_session(struct ust_app_session *ua_sess, - struct ltt_ust_session *usess) + struct ltt_ust_session *usess, + struct ust_app *app) { struct cds_lfht_node *ua_chan_node; struct cds_lfht_iter iter; struct ltt_ust_channel *uchan; struct ust_app_channel *ua_chan; + time_t rawtime; + struct tm *timeinfo; + char datetime[16]; + int ret; + + /* Get date and time for unique app path */ + time(&rawtime); + timeinfo = localtime(&rawtime); + strftime(datetime, sizeof(datetime), "%Y%m%d-%H%M%S", timeinfo); DBG2("Shadow copy of session handle %d", ua_sess->handle); ua_sess->uid = usess->uid; + ret = snprintf(ua_sess->path, PATH_MAX, + "%s/%s-%d-%s", + usess->pathname, app->name, app->key.pid, + datetime); + if (ret < 0) { + PERROR("asprintf UST shadow copy session"); + /* TODO: We cannot return an error from here.. */ + assert(0); + } + /* TODO: support all UST domain */ /* Iterate over all channels in global domain. */ cds_lfht_for_each_entry(usess->domain_global.channels, &iter, uchan, node) { + struct cds_lfht_iter uiter; + ua_chan_node = hashtable_lookup(ua_sess->channels, - (void *)uchan->name, strlen(uchan->name), &iter); + (void *)uchan->name, strlen(uchan->name), + &uiter); if (ua_chan_node != NULL) { continue; } @@ -579,7 +605,7 @@ static struct ust_app_session *create_ust_app_session( /* Only malloc can failed so something is really wrong */ goto error; } - shadow_copy_session(ua_sess, usess); + shadow_copy_session(ua_sess, usess, app); } if (ua_sess->handle == -1) { @@ -721,21 +747,14 @@ static int create_ust_app_metadata(struct ust_app_session *ua_sess, goto error; } - ret = snprintf(ua_sess->metadata->pathname, PATH_MAX, "%s/%s-%d", - pathname, app->name, app->key.pid); - if (ret < 0) { - PERROR("asprintf UST create stream"); - goto error; - } - - ret = mkdir(ua_sess->metadata->pathname, S_IRWXU | S_IRWXG); + ret = mkdir(ua_sess->path, S_IRWXU | S_IRWXG); if (ret < 0) { PERROR("mkdir UST metadata"); goto error; } - ret = snprintf(ua_sess->metadata->pathname, PATH_MAX, "%s/%s-%d/metadata", - pathname, app->name, app->key.pid); + ret = snprintf(ua_sess->metadata->pathname, PATH_MAX, + "%s/metadata", ua_sess->path); if (ret < 0) { PERROR("asprintf UST create stream"); goto error; @@ -1054,6 +1073,8 @@ int ust_app_create_event_all(struct ltt_ust_session *usess, /* For all registered applications */ cds_lfht_for_each_entry(ust_app_ht, &iter, app, node) { + struct cds_lfht_iter uiter; + /* Create session on the tracer side and add it to app session HT */ ua_sess = create_ust_app_session(usess, app); if (ua_sess == NULL) { @@ -1062,7 +1083,8 @@ int ust_app_create_event_all(struct ltt_ust_session *usess, /* Lookup channel in the ust app session */ ua_chan_node = hashtable_lookup(ua_sess->channels, - (void *)uchan->name, strlen(uchan->name), &iter); + (void *)uchan->name, strlen(uchan->name), + &uiter); if (ua_chan_node == NULL) { ERR("Channel %s not found in session uid %d. Skipping", uchan->name, usess->uid); @@ -1128,9 +1150,9 @@ int ust_app_start_trace(struct ltt_ust_session *usess, struct ust_app *app) /* Order is important */ cds_list_add_tail(&ustream->list, &ua_chan->streams.head); - ret = snprintf(ustream->pathname, PATH_MAX, "%s/%s-%d/%s_%u", - usess->pathname, app->name, app->key.pid, - ua_chan->name, ua_chan->streams.count++); + ret = snprintf(ustream->pathname, PATH_MAX, "%s/%s_%u", + ua_sess->path, ua_chan->name, + ua_chan->streams.count++); if (ret < 0) { PERROR("asprintf UST create stream"); continue;