X-Git-Url: https://git.lttng.org/?p=lttng-tools.git;a=blobdiff_plain;f=src%2Fbin%2Flttng-sessiond%2Ftrace-kernel.c;h=7789d6c208a09fa8aa1fec59f7b5f2f6816bcecc;hp=36f7c9708a8f47e0fa33d9ce579a33c0bf607e08;hb=ca2eb7f43cf00d12f563905d741a6789c3d130ee;hpb=dbbb3ec59c8af169c516360d27423af1cab923f6 diff --git a/src/bin/lttng-sessiond/trace-kernel.c b/src/bin/lttng-sessiond/trace-kernel.c index 36f7c9708..7789d6c20 100644 --- a/src/bin/lttng-sessiond/trace-kernel.c +++ b/src/bin/lttng-sessiond/trace-kernel.c @@ -91,23 +91,23 @@ struct ltt_kernel_session *trace_kernel_create_session(char *path) /* Allocate a new ltt kernel session */ lks = zmalloc(sizeof(struct ltt_kernel_session)); if (lks == NULL) { - perror("create kernel session zmalloc"); + PERROR("create kernel session zmalloc"); goto error; } /* 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 */ ret = asprintf(&lks->trace_path, "%s/kernel", path); if (ret < 0) { - perror("asprintf kernel traces path"); + PERROR("asprintf kernel traces path"); goto error; } @@ -129,18 +129,18 @@ struct ltt_kernel_channel *trace_kernel_create_channel(struct lttng_channel *cha lkc = zmalloc(sizeof(struct ltt_kernel_channel)); if (lkc == NULL) { - perror("ltt_kernel_channel zmalloc"); + PERROR("ltt_kernel_channel zmalloc"); goto error; } lkc->channel = zmalloc(sizeof(struct lttng_channel)); if (lkc->channel == NULL) { - perror("lttng_channel zmalloc"); + PERROR("lttng_channel zmalloc"); goto error; } 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; @@ -151,7 +151,7 @@ struct ltt_kernel_channel *trace_kernel_create_channel(struct lttng_channel *cha /* Set default trace output path */ ret = asprintf(&lkc->pathname, "%s", path); if (ret < 0) { - perror("asprintf kernel create channel"); + PERROR("asprintf kernel create channel"); goto error; } @@ -174,7 +174,7 @@ struct ltt_kernel_event *trace_kernel_create_event(struct lttng_event *ev) lke = zmalloc(sizeof(struct ltt_kernel_event)); attr = zmalloc(sizeof(struct lttng_kernel_event)); if (lke == NULL || attr == NULL) { - perror("kernel event zmalloc"); + PERROR("kernel event zmalloc"); goto error; } @@ -221,7 +221,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; @@ -246,7 +246,7 @@ struct ltt_kernel_metadata *trace_kernel_create_metadata(char *path) lkm = zmalloc(sizeof(struct ltt_kernel_metadata)); chan = zmalloc(sizeof(struct lttng_channel)); if (lkm == NULL || chan == NULL) { - perror("kernel metadata zmalloc"); + PERROR("kernel metadata zmalloc"); goto error; } @@ -259,12 +259,12 @@ 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); if (ret < 0) { - perror("asprintf kernel metadata"); + PERROR("asprintf kernel metadata"); goto error; } @@ -286,12 +286,12 @@ struct ltt_kernel_stream *trace_kernel_create_stream(void) lks = zmalloc(sizeof(struct ltt_kernel_stream)); if (lks == NULL) { - perror("kernel stream zmalloc"); + PERROR("kernel stream zmalloc"); goto error; } /* Init stream */ - lks->fd = 0; + lks->fd = -1; lks->pathname = NULL; lks->state = 0; @@ -306,9 +306,16 @@ error: */ void trace_kernel_destroy_stream(struct ltt_kernel_stream *stream) { + int ret; + DBG("[trace] Closing stream fd %d", stream->fd); /* Close kernel fd */ - close(stream->fd); + if (stream->fd >= 0) { + ret = close(stream->fd); + if (ret) { + PERROR("close"); + } + } /* Remove from stream list */ cds_list_del(&stream->list); @@ -321,9 +328,18 @@ void trace_kernel_destroy_stream(struct ltt_kernel_stream *stream) */ void trace_kernel_destroy_event(struct ltt_kernel_event *event) { - DBG("[trace] Closing event fd %d", event->fd); - /* Close kernel fd */ - close(event->fd); + int ret; + + if (event->fd >= 0) { + DBG("[trace] Closing event fd %d", event->fd); + /* Close kernel fd */ + ret = close(event->fd); + if (ret) { + PERROR("close"); + } + } else { + DBG("[trace] Tearing down event (no associated fd)"); + } /* Remove from event list */ cds_list_del(&event->list); @@ -340,10 +356,16 @@ void trace_kernel_destroy_channel(struct ltt_kernel_channel *channel) { struct ltt_kernel_stream *stream, *stmp; struct ltt_kernel_event *event, *etmp; + int ret; DBG("[trace] Closing channel fd %d", channel->fd); /* Close kernel fd */ - close(channel->fd); + if (channel->fd >= 0) { + ret = close(channel->fd); + if (ret) { + PERROR("close"); + } + } /* For each stream in the channel list */ cds_list_for_each_entry_safe(stream, stmp, &channel->stream_list.head, list) { @@ -369,9 +391,16 @@ void trace_kernel_destroy_channel(struct ltt_kernel_channel *channel) */ void trace_kernel_destroy_metadata(struct ltt_kernel_metadata *metadata) { + int ret; + DBG("[trace] Closing metadata fd %d", metadata->fd); /* Close kernel fd */ - close(metadata->fd); + if (metadata->fd >= 0) { + ret = close(metadata->fd); + if (ret) { + PERROR("close"); + } + } free(metadata->conf); free(metadata->pathname); @@ -384,14 +413,23 @@ void trace_kernel_destroy_metadata(struct ltt_kernel_metadata *metadata) void trace_kernel_destroy_session(struct ltt_kernel_session *session) { struct ltt_kernel_channel *channel, *ctmp; + int ret; DBG("[trace] Closing session fd %d", session->fd); /* Close kernel fds */ - close(session->fd); + 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); - close(session->metadata_stream_fd); + ret = close(session->metadata_stream_fd); + if (ret) { + PERROR("close"); + } } if (session->metadata != NULL) {