projects
/
lttng-tools.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Add creation time to UST app path to ensure uniqueness
[lttng-tools.git]
/
lttng-sessiond
/
ust-app.c
diff --git
a/lttng-sessiond/ust-app.c
b/lttng-sessiond/ust-app.c
index f23fd306b20bfd540861ce76ef33b27b0f4367e8..2bee4d90ab7626b7b51c314b67ef539d65441634 100644
(file)
--- 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) {
/* 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,
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);
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,
* 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;
{
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;
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) {
/* 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,
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;
}
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;
}
/* 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) {
}
if (ua_sess->handle == -1) {
@@
-721,21
+747,14
@@
static int create_ust_app_metadata(struct ust_app_session *ua_sess,
goto error;
}
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;
}
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;
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) {
/* 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) {
/* 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,
/* 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);
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);
/* Order is important */
cds_list_add_tail(&ustream->list, &ua_chan->streams.head);
- ret = snprintf(ustream->pathname, PATH_MAX, "%s/%s
-%d/%s
_%u",
- u
sess->pathname, app->name, app->key.pid
,
- ua_chan->
name, ua_chan->
streams.count++);
+ ret = snprintf(ustream->pathname, PATH_MAX, "%s/%s_%u",
+ u
a_sess->path, ua_chan->name
,
+ ua_chan->streams.count++);
if (ret < 0) {
PERROR("asprintf UST create stream");
continue;
if (ret < 0) {
PERROR("asprintf UST create stream");
continue;
This page took
0.024815 seconds
and
4
git commands to generate.