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();
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);
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';
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;
ret_code = LTTNG_OK;
*nb_events = local_nb_events;
error:
+ lttng_dynamic_pointer_array_reset(&exclusion_names);
rcu_read_unlock();
return ret_code;
}
attr = lttng_channel_copy(_attr);
if (!attr) {
- ret = -LTTNG_ERR_NOMEM;
+ ret = LTTNG_ERR_NOMEM;
goto end;
}
*/
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);
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 *)
if (ret < 0) {
lttng_channel_destroy(channel);
ret_code = LTTNG_ERR_UNK;
- break;
+ goto end;
}
extended->discarded_events = discarded_events;
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();
(int) trigger_owner,
ret_code);
}
+
+ goto end_unlock_session_list;
}
break;
}