goto error;
}
+ DBG3("Kernel create channel %s in %s with attr: %d, %zu, %zu, %u, %u, %d",
+ chan->name, path, lkc->channel->attr.overwrite,
+ lkc->channel->attr.subbuf_size, lkc->channel->attr.num_subbuf,
+ lkc->channel->attr.switch_timer_interval, lkc->channel->attr.read_timer_interval,
+ lkc->channel->attr.output);
+
/* Kernel tracer channel creation */
ret = kernctl_create_channel(session->fd, &lkc->channel->attr);
if (ret < 0) {
cds_list_add(&lkc->list, &session->channel_list.head);
session->channel_count++;
- DBG("Kernel channel %s created (fd: %d and path: %s)",
- lkc->channel->name, lkc->fd, lkc->pathname);
+ DBG("Kernel channel %s created (fd: %d)", lkc->channel->name, lkc->fd);
return 0;
ret = kernctl_create_event(channel->fd, event->event);
if (ret < 0) {
- if (errno != EEXIST) {
+ switch (errno) {
+ case EEXIST:
+ break;
+ case ENOSYS:
+ WARN("Event type not implemented");
+ break;
+ default:
PERROR("create event ioctl");
}
ret = -errno;
* Create kernel metadata, open from the kernel tracer and add it to the
* kernel session.
*/
-int kernel_open_metadata(struct ltt_kernel_session *session, char *path)
+int kernel_open_metadata(struct ltt_kernel_session *session)
{
int ret;
struct ltt_kernel_metadata *lkm;
/* Allocate kernel metadata */
- lkm = trace_kernel_create_metadata(path);
+ lkm = trace_kernel_create_metadata();
if (lkm == NULL) {
goto error;
}
session->metadata = lkm;
- DBG("Kernel metadata opened (fd: %d and path: %s)", lkm->fd, lkm->pathname);
+ DBG("Kernel metadata opened (fd: %d)", lkm->fd);
return 0;
ret = kernctl_buffer_flush(fd);
if (ret < 0) {
- ERR("Fail to flush metadata buffers %d (ret: %d", fd, ret);
+ ERR("Fail to flush metadata buffers %d (ret: %d)", fd, ret);
}
return 0;
*/
int kernel_open_channel_stream(struct ltt_kernel_channel *channel)
{
- int ret;
+ int ret, count = 0;
struct ltt_kernel_stream *lks;
while ((ret = kernctl_create_stream(channel->fd)) >= 0) {
- lks = trace_kernel_create_stream();
+ lks = trace_kernel_create_stream(channel->channel->name, count);
if (lks == NULL) {
ret = close(ret);
if (ret) {
PERROR("fcntl session fd");
}
- ret = asprintf(&lks->pathname, "%s/%s_%d",
- channel->pathname, channel->channel->name, channel->stream_count);
- if (ret < 0) {
- PERROR("asprintf kernel create stream");
- goto error;
- }
-
/* Add stream to channe stream list */
cds_list_add(&lks->list, &channel->stream_list.head);
channel->stream_count++;
- DBG("Kernel stream %d created (fd: %d, state: %d, path: %s)",
- channel->stream_count, lks->fd, lks->state, lks->pathname);
+ /* Increment counter which represent CPU number. */
+ count++;
+
+ DBG("Kernel stream %s created (fd: %d, state: %d)", lks->name, lks->fd,
+ lks->state);
}
return channel->stream_count;
*/
nbmem = KERNEL_EVENT_INIT_LIST_SIZE;
elist = zmalloc(sizeof(struct lttng_event) * nbmem);
+ if (elist == NULL) {
+ PERROR("alloc list events");
+ count = -ENOMEM;
+ goto end;
+ }
while ((size = fscanf(fp, "event { name = %m[^;]; };%n\n", &event, &pos)) == 1) {
if (count >= nbmem) {
+ struct lttng_event *new_elist;
+
DBG("Reallocating event list from %zu to %zu bytes", nbmem,
nbmem * 2);
/* Double the size */
nbmem <<= 1;
- elist = realloc(elist, nbmem * sizeof(struct lttng_event));
- if (elist == NULL) {
+ new_elist = realloc(elist, nbmem * sizeof(struct lttng_event));
+ if (new_elist == NULL) {
PERROR("realloc list events");
+ free(event);
+ free(elist);
count = -ENOMEM;
goto end;
}
+ elist = new_elist;
}
strncpy(elist[count].name, event, LTTNG_SYMBOL_NAME_LEN);
elist[count].name[LTTNG_SYMBOL_NAME_LEN - 1] = '\0';
elist[count].enabled = -1;
count++;
+ free(event);
}
*events = elist;