X-Git-Url: https://git.lttng.org/?p=lttng-tools.git;a=blobdiff_plain;f=ltt-sessiond%2Ftrace.c;h=5214cddfcfe6433560646c3d62dd1c181d6e3bf3;hp=8b1d15e105b730501bd149cd67088e8d12800356;hb=c363b55d55c5b1d0f43d7d8c2938b5bea842d6eb;hpb=540126381ff8f3b1e2b3357329fe105fc0bb5e4c diff --git a/ltt-sessiond/trace.c b/ltt-sessiond/trace.c index 8b1d15e10..5214cddfc 100644 --- a/ltt-sessiond/trace.c +++ b/ltt-sessiond/trace.c @@ -20,6 +20,7 @@ #include #include #include +#include #include #include "ltt-sessiond.h" @@ -207,3 +208,79 @@ struct ltt_kernel_stream *trace_create_kernel_stream(void) error: return NULL; } + +void trace_destroy_kernel_stream(struct ltt_kernel_stream *stream) +{ + /* Close kernel fd */ + close(stream->fd); + free(stream->pathname); + + /* Remove from stream list */ + cds_list_del(&stream->list); + free(stream); +} + +void trace_destroy_kernel_event(struct ltt_kernel_event *event) +{ + /* Close kernel fd */ + close(event->fd); + /* Free attributes */ + free(event->event); + + /* Remove from event list */ + cds_list_del(&event->list); + free(event); +} + +void trace_destroy_kernel_channel(struct ltt_kernel_channel *channel) +{ + struct ltt_kernel_stream *stream; + struct ltt_kernel_event *event; + + /* Close kernel fd */ + close(channel->fd); + free(channel->pathname); + /* Free attributes structure */ + free(channel->channel); + + /* For each stream in the channel list */ + cds_list_for_each_entry(stream, &channel->stream_list.head, list) { + trace_destroy_kernel_stream(stream); + } + + /* For each event in the channel list */ + cds_list_for_each_entry(event, &channel->events_list.head, list) { + trace_destroy_kernel_event(event); + } + + /* Remove from channel list */ + cds_list_del(&channel->list); + free(channel); +} + +void trace_destroy_kernel_metadata(struct ltt_kernel_metadata *metadata) +{ + /* Close kernel fd */ + close(metadata->fd); + /* Free attributes */ + free(metadata->conf); + + free(metadata); +} + +void trace_destroy_kernel_session(struct ltt_kernel_session *session) +{ + struct ltt_kernel_channel *channel; + + /* Close kernel fds */ + close(session->fd); + close(session->metadata_stream_fd); + + trace_destroy_kernel_metadata(session->metadata); + + cds_list_for_each_entry(channel, &session->channel_list.head, list) { + trace_destroy_kernel_channel(channel); + } + + free(session); +}