X-Git-Url: http://git.lttng.org./?a=blobdiff_plain;f=src%2Fbin%2Flttng-sessiond%2Fcmd.c;h=1adeeee4701d34e844f66d1217a716974a50b01a;hb=0bfaecd62c7bcc1ec52262b3ccb08b6916019d44;hp=87676b0e79dd6a00194dfde2ccbe5d9e6ec48139;hpb=1fdabf20a7bf1cbed0fbe2c97baec36a96428c2d;p=lttng-tools.git diff --git a/src/bin/lttng-sessiond/cmd.c b/src/bin/lttng-sessiond/cmd.c index 87676b0e7..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(); @@ -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; } @@ -4519,6 +4543,8 @@ enum lttng_error_code synchronize_tracer_notifier_register( (int) trigger_owner, ret_code); } + + goto end_unlock_session_list; } break; }