projects
/
lttng-tools.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fix: kernel session closes fd 0 after create
[lttng-tools.git]
/
src
/
bin
/
lttng-sessiond
/
trace-kernel.c
diff --git
a/src/bin/lttng-sessiond/trace-kernel.c
b/src/bin/lttng-sessiond/trace-kernel.c
index 68753286fb81c336e5026eb0eb64411ebbd5a81f..7789d6c208a09fa8aa1fec59f7b5f2f6816bcecc 100644
(file)
--- 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) {
/* 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 */
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->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) {
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;
}
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) {
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) {
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));
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;
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) {
/* 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;
}
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) {
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;
}
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 */
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;
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) {
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;
}
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 */
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) {
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;
}
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) {
lks = zmalloc(sizeof(struct ltt_kernel_stream));
if (lks == NULL) {
-
perror
("kernel stream zmalloc");
+
PERROR
("kernel stream zmalloc");
goto error;
}
/* Init stream */
goto error;
}
/* Init stream */
- lks->fd =
0
;
+ lks->fd =
-1
;
lks->pathname = NULL;
lks->state = 0;
lks->pathname = NULL;
lks->state = 0;
@@
-306,9
+306,16
@@
error:
*/
void trace_kernel_destroy_stream(struct ltt_kernel_stream *stream)
{
*/
void trace_kernel_destroy_stream(struct ltt_kernel_stream *stream)
{
+ int ret;
+
DBG("[trace] Closing stream fd %d", stream->fd);
/* Close kernel fd */
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);
/* Remove from stream list */
cds_list_del(&stream->list);
@@
-321,10
+328,15
@@
void trace_kernel_destroy_stream(struct ltt_kernel_stream *stream)
*/
void trace_kernel_destroy_event(struct ltt_kernel_event *event)
{
*/
void trace_kernel_destroy_event(struct ltt_kernel_event *event)
{
+ int ret;
+
if (event->fd >= 0) {
DBG("[trace] Closing event fd %d", event->fd);
/* Close kernel fd */
if (event->fd >= 0) {
DBG("[trace] Closing event fd %d", event->fd);
/* Close kernel fd */
- close(event->fd);
+ ret = close(event->fd);
+ if (ret) {
+ PERROR("close");
+ }
} else {
DBG("[trace] Tearing down event (no associated fd)");
}
} else {
DBG("[trace] Tearing down event (no associated fd)");
}
@@
-344,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;
{
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 */
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) {
/* For each stream in the channel list */
cds_list_for_each_entry_safe(stream, stmp, &channel->stream_list.head, list) {
@@
-373,9
+391,16
@@
void trace_kernel_destroy_channel(struct ltt_kernel_channel *channel)
*/
void trace_kernel_destroy_metadata(struct ltt_kernel_metadata *metadata)
{
*/
void trace_kernel_destroy_metadata(struct ltt_kernel_metadata *metadata)
{
+ int ret;
+
DBG("[trace] Closing metadata fd %d", metadata->fd);
/* Close kernel fd */
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);
free(metadata->conf);
free(metadata->pathname);
@@
-388,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;
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 */
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);
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) {
}
if (session->metadata != NULL) {
This page took
0.031796 seconds
and
4
git commands to generate.