X-Git-Url: http://git.efficios.com/?p=lttng-tools.git;a=blobdiff_plain;f=src%2Fbin%2Flttng-sessiond%2Fsave.c;h=e2c93b4bba1663d139e4257f8659c2ea070ff667;hp=d2bf09208e05b3c4a472657d31ea366b4c22ddba;hb=705bb62fac2a79ed3e04232cc831645c852cc1a2;hpb=c39270e5164ae28af92157ed428b61a5cdd03f8f diff --git a/src/bin/lttng-sessiond/save.c b/src/bin/lttng-sessiond/save.c index d2bf09208..e2c93b4bb 100644 --- a/src/bin/lttng-sessiond/save.c +++ b/src/bin/lttng-sessiond/save.c @@ -25,7 +25,6 @@ #include #include #include -#include #include #include #include @@ -259,8 +258,12 @@ const char *get_ust_context_type_string( case LTTNG_UST_CONTEXT_PTHREAD_ID: context_type_string = config_event_context_pthread_id; break; + case LTTNG_UST_CONTEXT_PERF_THREAD_COUNTER: + context_type_string = config_event_context_perf_thread_counter; + break; default: context_type_string = NULL; + break; } return context_type_string; @@ -667,19 +670,13 @@ int save_kernel_context(struct config_writer *writer, goto end; } - ret = config_writer_open_element(writer, config_element_contexts); - if (ret) { - ret = LTTNG_ERR_SAVE_IO_FAIL; - goto end; - } - ret = config_writer_open_element(writer, config_element_context); if (ret) { ret = LTTNG_ERR_SAVE_IO_FAIL; goto end; } - if (ctx->ctx == LTTNG_KERNEL_CONTEXT_PERF_COUNTER) { + if (ctx->ctx == LTTNG_KERNEL_CONTEXT_PERF_CPU_COUNTER) { ret = config_writer_open_element(writer, config_element_perf); if (ret) { ret = LTTNG_ERR_SAVE_IO_FAIL; @@ -738,6 +735,30 @@ int save_kernel_context(struct config_writer *writer, goto end; } +end: + return ret; +} + +static +int save_kernel_contexts(struct config_writer *writer, + struct ltt_kernel_channel *kchan) +{ + int ret; + struct ltt_kernel_context *ctx; + + ret = config_writer_open_element(writer, config_element_contexts); + if (ret) { + ret = LTTNG_ERR_SAVE_IO_FAIL; + goto end; + } + + cds_list_for_each_entry(ctx, &kchan->ctx_list, list) { + ret = save_kernel_context(writer, &ctx->ctx); + if (ret) { + goto end; + } + } + /* /contexts */ ret = config_writer_close_element(writer); if (ret) { @@ -845,7 +866,7 @@ int save_kernel_channel(struct config_writer *writer, goto end; } - ret = save_kernel_context(writer, kchan->ctx); + ret = save_kernel_contexts(writer, kchan); if (ret) { goto end; } @@ -990,7 +1011,7 @@ end: static int save_ust_session(struct config_writer *writer, - struct ltt_session *session, int save_jul) + struct ltt_session *session, int save_agent) { int ret; struct ltt_ust_channel *ust_chan; @@ -1002,7 +1023,7 @@ int save_ust_session(struct config_writer *writer, assert(session); ret = config_writer_write_element_string(writer, config_element_type, - save_jul ? config_domain_type_jul : config_domain_type_ust); + save_agent ? config_domain_type_jul : config_domain_type_ust); if (ret) { ret = LTTNG_ERR_SAVE_IO_FAIL; goto end; @@ -1032,11 +1053,11 @@ int save_ust_session(struct config_writer *writer, rcu_read_lock(); cds_lfht_for_each_entry(session->ust_session->domain_global.channels->ht, &iter.iter, node, node) { - int jul_channel; + int agent_channel; ust_chan = caa_container_of(node, struct ltt_ust_channel, node); - jul_channel = !strcmp(DEFAULT_JUL_CHANNEL_NAME, ust_chan->name); - if (!(save_jul ^ jul_channel)) { + agent_channel = !strcmp(DEFAULT_JUL_CHANNEL_NAME, ust_chan->name); + if (!(save_agent ^ agent_channel)) { ret = save_ust_channel(writer, ust_chan, session->ust_session); if (ret) { rcu_read_unlock(); @@ -1118,7 +1139,7 @@ int save_domains(struct config_writer *writer, struct ltt_session *session) } if (session->ust_session && - session->ust_session->domain_jul.being_used) { + lttng_ht_get_count(session->ust_session->agents) > 0) { ret = config_writer_open_element(writer, config_element_domain); if (ret) { @@ -1398,6 +1419,7 @@ int save_session(struct ltt_session *session, struct lttng_save_session_attr *attr, lttng_sock_cred *creds) { int ret, fd; + unsigned int file_opened = 0; /* Indicate if the file has been opened */ char config_file_path[PATH_MAX]; size_t len; struct config_writer *writer = NULL; @@ -1409,6 +1431,7 @@ int save_session(struct ltt_session *session, assert(creds); session_name_len = strlen(session->name); + memset(config_file_path, 0, sizeof(config_file_path)); if (!session_access_ok(session, LTTNG_SOCK_GET_UID_CRED(creds), @@ -1419,6 +1442,7 @@ int save_session(struct ltt_session *session, provided_path = lttng_save_session_attr_get_output_url(attr); if (provided_path) { + DBG3("Save session in provided path %s", provided_path); len = strlen(provided_path); if (len >= sizeof(config_file_path)) { ret = LTTNG_ERR_SET_URL; @@ -1471,9 +1495,12 @@ int save_session(struct ltt_session *session, strncpy(config_file_path + len, session->name, session_name_len); len += session_name_len; strcpy(config_file_path + len, DEFAULT_SESSION_CONFIG_FILE_EXTENSION); + len += sizeof(DEFAULT_SESSION_CONFIG_FILE_EXTENSION); + config_file_path[len] = '\0'; if (!access(config_file_path, F_OK) && !attr->overwrite) { - /* A file with the same name already exists, skip */ + /* File exists, notify the user since the overwrite flag is off. */ + ret = LTTNG_ERR_SAVE_FILE_EXIST; goto end; } @@ -1485,8 +1512,9 @@ int save_session(struct ltt_session *session, ret = LTTNG_ERR_SAVE_IO_FAIL; goto end; } + file_opened = 1; - writer = config_writer_create(fd); + writer = config_writer_create(fd, 1); if (!writer) { ret = LTTNG_ERR_NOMEM; goto end; @@ -1517,7 +1545,7 @@ int save_session(struct ltt_session *session, } ret = config_writer_write_element_bool(writer, config_element_started, - session->enabled); + session->active); if (ret) { ret = LTTNG_ERR_SAVE_IO_FAIL; goto end; @@ -1538,7 +1566,7 @@ int save_session(struct ltt_session *session, goto end; } } else { - ret = config_writer_write_element_signed_int(writer, + ret = config_writer_write_element_unsigned_int(writer, config_element_live_timer_interval, session->live_timer); if (ret) { ret = LTTNG_ERR_SAVE_IO_FAIL; @@ -1579,7 +1607,7 @@ end: } if (ret) { /* Delete file in case of error */ - if (unlink(config_file_path)) { + if (file_opened && unlink(config_file_path)) { PERROR("Unlinking XML session configuration."); } }