X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=src%2Fbin%2Flttng-sessiond%2Fcmd.c;h=1adeeee4701d34e844f66d1217a716974a50b01a;hb=0bfaecd62c7bcc1ec52262b3ccb08b6916019d44;hp=9552bbb8680f363477b2d56811196862f7e324c4;hpb=997edb99904a51565b70fe77e56e9bba06136ac1;p=lttng-tools.git diff --git a/src/bin/lttng-sessiond/cmd.c b/src/bin/lttng-sessiond/cmd.c index 9552bbb86..1adeeee47 100644 --- a/src/bin/lttng-sessiond/cmd.c +++ b/src/bin/lttng-sessiond/cmd.c @@ -376,10 +376,13 @@ static enum lttng_error_code list_lttng_ust_global_events(char *channel_name, struct ltt_ust_event *uevent; unsigned long channel_event_count; unsigned int local_nb_events = 0; + struct lttng_dynamic_pointer_array exclusion_names; assert(reply_payload); assert(nb_events); + lttng_dynamic_pointer_array_init(&exclusion_names, NULL); + DBG("Listing UST global events for channel %s", channel_name); rcu_read_lock(); @@ -388,7 +391,7 @@ static enum lttng_error_code list_lttng_ust_global_events(char *channel_name, node = lttng_ht_iter_get_node_str(&iter); if (node == NULL) { ret_code = LTTNG_ERR_UST_CHAN_NOT_FOUND; - goto end; + goto error; } uchan = caa_container_of(&node->node, struct ltt_ust_channel, node.node); @@ -421,14 +424,14 @@ static enum lttng_error_code list_lttng_ust_global_events(char *channel_name, tmp_event = lttng_event_create(); if (!tmp_event) { ret_code = LTTNG_ERR_NOMEM; - goto end; + goto error; } if (lttng_strncpy(tmp_event->name, uevent->attr.name, LTTNG_SYMBOL_NAME_LEN)) { ret_code = LTTNG_ERR_FATAL; lttng_event_destroy(tmp_event); - goto end; + goto error; } tmp_event->name[LTTNG_SYMBOL_NAME_LEN - 1] = '\0'; @@ -465,14 +468,34 @@ static enum lttng_error_code list_lttng_ust_global_events(char *channel_name, tmp_event->exclusion = 1; } + if (uevent->exclusion) { + int i; + + for (i = 0; i < uevent->exclusion->count; i++) { + const int add_ret = lttng_dynamic_pointer_array_add_pointer( + &exclusion_names, + LTTNG_EVENT_EXCLUSION_NAME_AT(uevent->exclusion, i)); + + if (add_ret) { + PERROR("Failed to add exclusion name to temporary serialization array"); + ret_code = LTTNG_ERR_NOMEM; + goto error; + } + } + } + /* * We do not care about the filter bytecode and the fd from the * userspace_probe_location. */ - ret = lttng_event_serialize(tmp_event, uevent->exclusion ? uevent->exclusion->count : 0, - uevent->exclusion ? (char **) uevent->exclusion ->names : NULL, - uevent->filter_expression, 0, NULL, reply_payload); + ret = lttng_event_serialize(tmp_event, + lttng_dynamic_pointer_array_get_count(&exclusion_names), + lttng_dynamic_pointer_array_get_count(&exclusion_names) ? + (char **) exclusion_names.array.buffer.data : NULL, + uevent->filter_expression, 0, NULL, + reply_payload); lttng_event_destroy(tmp_event); + lttng_dynamic_pointer_array_clear(&exclusion_names); if (ret) { ret_code = LTTNG_ERR_FATAL; goto error; @@ -484,6 +507,7 @@ end: ret_code = LTTNG_OK; *nb_events = local_nb_events; error: + lttng_dynamic_pointer_array_reset(&exclusion_names); rcu_read_unlock(); return ret_code; } @@ -1292,7 +1316,7 @@ static int cmd_enable_channel_internal(struct ltt_session *session, attr = lttng_channel_copy(_attr); if (!attr) { - ret = -LTTNG_ERR_NOMEM; + ret = LTTNG_ERR_NOMEM; goto end; } @@ -2819,7 +2843,7 @@ int cmd_start_trace(struct ltt_session *session) */ session->rotated_after_last_stop = false; - if (session->rotate_timer_period) { + if (session->rotate_timer_period && !session->rotation_schedule_timer_enabled) { int int_ret = timer_session_rotation_schedule_timer_start( session, session->rotate_timer_period); @@ -3766,8 +3790,8 @@ enum lttng_error_code cmd_list_channels(enum lttng_domain_type domain, channel = trace_ust_channel_to_lttng_channel(uchan); if (!channel) { - ret = LTTNG_ERR_NOMEM; - break; + ret_code = LTTNG_ERR_NOMEM; + goto end; } extended = (struct lttng_channel_extended *) @@ -3778,7 +3802,7 @@ enum lttng_error_code cmd_list_channels(enum lttng_domain_type domain, if (ret < 0) { lttng_channel_destroy(channel); ret_code = LTTNG_ERR_UNK; - break; + goto end; } extended->discarded_events = discarded_events; @@ -3789,11 +3813,12 @@ enum lttng_error_code cmd_list_channels(enum lttng_domain_type domain, if (ret) { ERR("Failed to serialize lttng_channel: channel name = '%s'", channel->name); + lttng_channel_destroy(channel); ret_code = LTTNG_ERR_UNK; - ret = -1; - break; + goto end; } + lttng_channel_destroy(channel); i++; } rcu_read_unlock(); @@ -4518,6 +4543,8 @@ enum lttng_error_code synchronize_tracer_notifier_register( (int) trigger_owner, ret_code); } + + goto end_unlock_session_list; } break; }