X-Git-Url: http://git.efficios.com/?p=lttng-tools.git;a=blobdiff_plain;f=src%2Fbin%2Flttng-sessiond%2Ftrace-kernel.c;h=293ca381b6bf3a24f88907acf6cb9f32f60fd698;hp=8fb92f12ab13c08386108c0feddcc3769a1aee95;hb=b8aa16822f579a6e15b41d2761801a0a65d5f2a5;hpb=799e2c4f4ecb595fcb52c3e6affd3b4ec7b5b24e diff --git a/src/bin/lttng-sessiond/trace-kernel.c b/src/bin/lttng-sessiond/trace-kernel.c index 8fb92f12a..293ca381b 100644 --- a/src/bin/lttng-sessiond/trace-kernel.c +++ b/src/bin/lttng-sessiond/trace-kernel.c @@ -1,19 +1,18 @@ /* * Copyright (C) 2011 - David Goulet * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; only version 2 - * of the License. + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License, version 2 only, + * as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #define _GNU_SOURCE @@ -96,12 +95,12 @@ struct ltt_kernel_session *trace_kernel_create_session(char *path) } /* Init data structure */ - lks->fd = 0; - lks->metadata_stream_fd = 0; + lks->fd = -1; + lks->metadata_stream_fd = -1; lks->channel_count = 0; lks->stream_count_global = 0; lks->metadata = NULL; - lks->consumer_fd = 0; + lks->consumer_fd = -1; CDS_INIT_LIST_HEAD(&lks->channel_list.head); /* Set session path */ @@ -140,7 +139,7 @@ struct ltt_kernel_channel *trace_kernel_create_channel(struct lttng_channel *cha } memcpy(lkc->channel, chan, sizeof(struct lttng_channel)); - lkc->fd = 0; + lkc->fd = -1; lkc->stream_count = 0; lkc->event_count = 0; lkc->enabled = 1; @@ -221,7 +220,7 @@ struct ltt_kernel_event *trace_kernel_create_event(struct lttng_event *ev) attr->name[LTTNG_KERNEL_SYM_NAME_LEN - 1] = '\0'; /* Setting up a kernel event */ - lke->fd = 0; + lke->fd = -1; lke->event = attr; lke->enabled = 1; lke->ctx = NULL; @@ -229,6 +228,8 @@ struct ltt_kernel_event *trace_kernel_create_event(struct lttng_event *ev) return lke; error: + free(lke); + free(attr); return NULL; } @@ -259,7 +260,7 @@ struct ltt_kernel_metadata *trace_kernel_create_metadata(char *path) chan->attr.output = DEFAULT_KERNEL_CHANNEL_OUTPUT; /* Init metadata */ - lkm->fd = 0; + lkm->fd = -1; lkm->conf = chan; /* Set default metadata path */ ret = asprintf(&lkm->pathname, "%s/metadata", path); @@ -271,6 +272,8 @@ struct ltt_kernel_metadata *trace_kernel_create_metadata(char *path) return lkm; error: + free(lkm); + free(chan); return NULL; } @@ -291,7 +294,7 @@ struct ltt_kernel_stream *trace_kernel_create_stream(void) } /* Init stream */ - lks->fd = 0; + lks->fd = -1; lks->pathname = NULL; lks->state = 0; @@ -310,9 +313,11 @@ void trace_kernel_destroy_stream(struct ltt_kernel_stream *stream) DBG("[trace] Closing stream fd %d", stream->fd); /* Close kernel fd */ - ret = close(stream->fd); - if (ret) { - PERROR("close"); + if (stream->fd >= 0) { + ret = close(stream->fd); + if (ret) { + PERROR("close"); + } } /* Remove from stream list */ cds_list_del(&stream->list); @@ -358,9 +363,11 @@ void trace_kernel_destroy_channel(struct ltt_kernel_channel *channel) DBG("[trace] Closing channel fd %d", channel->fd); /* Close kernel fd */ - ret = close(channel->fd); - if (ret) { - PERROR("close"); + if (channel->fd >= 0) { + ret = close(channel->fd); + if (ret) { + PERROR("close"); + } } /* For each stream in the channel list */ @@ -391,9 +398,11 @@ void trace_kernel_destroy_metadata(struct ltt_kernel_metadata *metadata) DBG("[trace] Closing metadata fd %d", metadata->fd); /* Close kernel fd */ - ret = close(metadata->fd); - if (ret) { - PERROR("close"); + if (metadata->fd >= 0) { + ret = close(metadata->fd); + if (ret) { + PERROR("close"); + } } free(metadata->conf); @@ -411,12 +420,14 @@ void trace_kernel_destroy_session(struct ltt_kernel_session *session) DBG("[trace] Closing session fd %d", session->fd); /* Close kernel fds */ - ret = close(session->fd); - if (ret) { - PERROR("close"); + if (session->fd >= 0) { + ret = close(session->fd); + if (ret) { + PERROR("close"); + } } - if (session->metadata_stream_fd != 0) { + if (session->metadata_stream_fd >= 0) { DBG("[trace] Closing metadata stream fd %d", session->metadata_stream_fd); ret = close(session->metadata_stream_fd); if (ret) {