X-Git-Url: http://git.efficios.com/?p=lttng-tools.git;a=blobdiff_plain;f=ltt-sessiond%2Ftrace.c;h=5cd053652451678e56b25cc50dbe6037701b2765;hp=8b1d15e105b730501bd149cd67088e8d12800356;hb=d686b40f66ea5df5ac0b9405991bbc33348b0a88;hpb=540126381ff8f3b1e2b3357329fe105fc0bb5e4c diff --git a/ltt-sessiond/trace.c b/ltt-sessiond/trace.c index 8b1d15e10..5cd053652 100644 --- a/ltt-sessiond/trace.c +++ b/ltt-sessiond/trace.c @@ -20,8 +20,10 @@ #include #include #include +#include #include +#include "lttngerr.h" #include "ltt-sessiond.h" #include "trace.h" @@ -207,3 +209,85 @@ struct ltt_kernel_stream *trace_create_kernel_stream(void) error: return NULL; } + +void trace_destroy_kernel_stream(struct ltt_kernel_stream *stream) +{ + DBG("[trace] Closing stream fd %d", stream->fd); + /* 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) +{ + DBG("[trace] Closing event fd %d", event->fd); + /* 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; + + DBG("[trace] Closing channel fd %d", channel->fd); + /* 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) +{ + DBG("[trace] Closing metadata fd %d", metadata->fd); + /* 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; + + DBG("[trace] Closing session fd %d", session->fd); + /* Close kernel fds */ + close(session->fd); + DBG("[trace] Closing metadata stream fd %d", session->metadata_stream_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); +}