projects
/
lttng-tools.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Change disable channel command to be per domain
[lttng-tools.git]
/
ltt-sessiond
/
kernel-ctl.c
diff --git
a/ltt-sessiond/kernel-ctl.c
b/ltt-sessiond/kernel-ctl.c
index 168bce1f3d3eb9ea89566da7cb65995fe8bb9c20..27210708e64f1f791b9322d78e01fe7d3258d5e9 100644
(file)
--- a/
ltt-sessiond/kernel-ctl.c
+++ b/
ltt-sessiond/kernel-ctl.c
@@
-3,8
+3,8
@@
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
*
* 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;
either
version 2
- * of the License
, or (at your option) any later version
.
+ * as published by the Free Software Foundation;
only
version 2
+ * of the License.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
@@
-25,7
+25,6
@@
#include <unistd.h>
#include "lttngerr.h"
#include <unistd.h>
#include "lttngerr.h"
-#include "ltt-sessiond.h"
#include "libkernelctl.h"
#include "kernel-ctl.h"
#include "libkernelctl.h"
#include "kernel-ctl.h"
@@
-42,7
+41,12
@@
int kernel_add_channel_context(struct ltt_kernel_channel *chan,
DBG("Adding context to channel %s", chan->channel->name);
ret = kernctl_add_context(chan->fd, ctx);
if (ret < 0) {
DBG("Adding context to channel %s", chan->channel->name);
ret = kernctl_add_context(chan->fd, ctx);
if (ret < 0) {
- perror("add context ioctl");
+ if (errno != EEXIST) {
+ perror("add context ioctl");
+ } else {
+ /* If EEXIST, we just ignore the error */
+ ret = 0;
+ }
goto error;
}
goto error;
}
@@
-125,7
+129,6
@@
int kernel_create_session(struct ltt_session *session, int tracer_fd)
lks->kconsumer_fds_sent = 0;
session->kernel_session = lks;
lks->kconsumer_fds_sent = 0;
session->kernel_session = lks;
- session->kern_session_count++;
DBG("Kernel session created (fd: %d)", lks->fd);
DBG("Kernel session created (fd: %d)", lks->fd);
@@
-211,6
+214,8
@@
int kernel_create_event(struct lttng_event *ev, struct ltt_kernel_channel *chann
/* Add event to event list */
cds_list_add(&event->list, &channel->events_list.head);
/* Add event to event list */
cds_list_add(&event->list, &channel->events_list.head);
+ channel->event_count++;
+
DBG("Event %s created (fd: %d)", ev->name, event->fd);
return 0;
DBG("Event %s created (fd: %d)", ev->name, event->fd);
return 0;
@@
-283,6
+288,9
@@
int kernel_enable_event(struct ltt_kernel_event *event)
ret = kernctl_enable(event->fd);
if (ret < 0) {
perror("enable event ioctl");
ret = kernctl_enable(event->fd);
if (ret < 0) {
perror("enable event ioctl");
+ if (errno == EEXIST) {
+ ret = -EEXIST;
+ }
goto error;
}
goto error;
}
@@
-325,13
+333,13
@@
error:
* Create kernel metadata, open from the kernel tracer and add it to the
* kernel session.
*/
* Create kernel metadata, open from the kernel tracer and add it to the
* kernel session.
*/
-int kernel_open_metadata(struct ltt_kernel_session *session)
+int kernel_open_metadata(struct ltt_kernel_session *session
, char *path
)
{
int ret;
struct ltt_kernel_metadata *lkm;
/* Allocate kernel metadata */
{
int ret;
struct ltt_kernel_metadata *lkm;
/* Allocate kernel metadata */
- lkm = trace_create_kernel_metadata();
+ lkm = trace_create_kernel_metadata(
path
);
if (lkm == NULL) {
goto error;
}
if (lkm == NULL) {
goto error;
}
@@
-542,18
+550,16
@@
error:
}
/*
}
/*
- * kernel_list_events
- *
- * Get the event list from the kernel tracer and return that list in the CTF
- * format.
+ * Get the event list from the kernel tracer and return the number of elements.
*/
*/
-ssize_t kernel_list_events(int tracer_fd,
char **list
)
+ssize_t kernel_list_events(int tracer_fd,
struct lttng_event **events
)
{
{
- int fd;
- char *
buf, *line = NULL
;
- size_t nb
, nbmem, total
= 0;
+ int fd
, pos
;
+ char *
event
;
+ size_t nb
mem, count
= 0;
ssize_t size;
FILE *fp;
ssize_t size;
FILE *fp;
+ struct lttng_event *elist;
fd = kernctl_tracepoint_list(tracer_fd);
if (fd < 0) {
fd = kernctl_tracepoint_list(tracer_fd);
if (fd < 0) {
@@
-572,29
+578,29
@@
ssize_t kernel_list_events(int tracer_fd, char **list)
* See kernel-ctl.h for explanation of this value
*/
nbmem = KERNEL_EVENT_LIST_SIZE;
* See kernel-ctl.h for explanation of this value
*/
nbmem = KERNEL_EVENT_LIST_SIZE;
-
buf = malloc(
nbmem);
+
elist = malloc(sizeof(struct lttng_event) *
nbmem);
- while ((size =
getline(&line, &nb, fp)) != -
1) {
- if (
total + size
> nbmem) {
+ while ((size =
fscanf(fp, "event { name = %m[^;]; };%n\n", &event, &pos)) ==
1) {
+ if (
count
> nbmem) {
DBG("Reallocating event list from %zd to %zd bytes", nbmem,
DBG("Reallocating event list from %zd to %zd bytes", nbmem,
-
total + size
+ KERNEL_EVENT_LIST_SIZE);
+
nbmem
+ KERNEL_EVENT_LIST_SIZE);
/* Adding the default size again */
/* Adding the default size again */
- nbmem
= total + size +
KERNEL_EVENT_LIST_SIZE;
-
buf = realloc(buf
, nbmem);
- if (
buf
== NULL) {
+ nbmem
+=
KERNEL_EVENT_LIST_SIZE;
+
elist = realloc(elist
, nbmem);
+ if (
elist
== NULL) {
perror("realloc list events");
goto error;
}
}
perror("realloc list events");
goto error;
}
}
-
memcpy(buf + total, line, size
);
-
total += size
;
+
strncpy(elist[count].name, event, strlen(event)
);
+
count++
;
}
}
- *
list = buf
;
+ *
events = elist
;
- DBG("Kernel list events done
"
);
+ DBG("Kernel list events done
(%ld events)", count
);
- return
total
;
+ return
count
;
error:
return -1;
error:
return -1;
This page took
0.02694 seconds
and
5
git commands to generate.