lks->channel_count = 0;
lks->stream_count_global = 0;
lks->metadata = NULL;
+ lks->consumer_fd = 0;
CDS_INIT_LIST_HEAD(&lks->channel_list.head);
return lks;
lkc->fd = 0;
lkc->stream_count = 0;
+ lkc->event_count = 0;
lkc->enabled = 1;
+ lkc->ctx = NULL;
/* Init linked list */
CDS_INIT_LIST_HEAD(&lkc->events_list.head);
CDS_INIT_LIST_HEAD(&lkc->stream_list.head);
attr->u.kprobe.offset = ev->attr.probe.offset;
strncpy(attr->u.kprobe.symbol_name,
ev->attr.probe.symbol_name, LTTNG_SYM_NAME_LEN);
+ attr->u.kprobe.symbol_name[LTTNG_SYM_NAME_LEN - 1] = '\0';
break;
case LTTNG_EVENT_FUNCTION:
+ attr->instrumentation = LTTNG_KERNEL_KRETPROBE;
+ attr->u.kretprobe.addr = ev->attr.probe.addr;
+ attr->u.kretprobe.offset = ev->attr.probe.offset;
+ attr->u.kretprobe.offset = ev->attr.probe.offset;
+ strncpy(attr->u.kretprobe.symbol_name,
+ ev->attr.probe.symbol_name, LTTNG_SYM_NAME_LEN);
+ attr->u.kretprobe.symbol_name[LTTNG_SYM_NAME_LEN - 1] = '\0';
+ break;
+ case LTTNG_EVENT_FUNCTION_ENTRY:
attr->instrumentation = LTTNG_KERNEL_FUNCTION;
strncpy(attr->u.ftrace.symbol_name,
ev->attr.ftrace.symbol_name, LTTNG_SYM_NAME_LEN);
+ attr->u.ftrace.symbol_name[LTTNG_SYM_NAME_LEN - 1] = '\0';
break;
case LTTNG_EVENT_TRACEPOINT:
attr->instrumentation = LTTNG_KERNEL_TRACEPOINT;
/* Copy event name */
strncpy(attr->name, ev->name, LTTNG_SYM_NAME_LEN);
+ attr->name[LTTNG_SYM_NAME_LEN - 1] = '\0';
/* Setting up a kernel event */
lke->fd = 0;
lke->event = attr;
lke->enabled = 1;
+ lke->ctx = NULL;
return lke;
/* Set default attributes */
chan->attr.overwrite = DEFAULT_CHANNEL_OVERWRITE;
- chan->attr.subbuf_size = DEFAULT_CHANNEL_SUBBUF_SIZE;
- chan->attr.num_subbuf = DEFAULT_CHANNEL_SUBBUF_NUM;
+ chan->attr.subbuf_size = DEFAULT_METADATA_SUBBUF_SIZE;
+ chan->attr.num_subbuf = DEFAULT_METADATA_SUBBUF_NUM;
chan->attr.switch_timer_interval = DEFAULT_CHANNEL_SWITCH_TIMER;
chan->attr.read_timer_interval = DEFAULT_CHANNEL_READ_TIMER;
chan->attr.output = DEFAULT_KERNEL_CHANNEL_OUTPUT;
void trace_destroy_kernel_channel(struct ltt_kernel_channel *channel)
{
- struct ltt_kernel_stream *stream;
- struct ltt_kernel_event *event;
+ struct ltt_kernel_stream *stream, *stmp;
+ struct ltt_kernel_event *event, *etmp;
DBG("[trace] Closing channel fd %d", channel->fd);
/* Close kernel fd */
free(channel->channel);
/* For each stream in the channel list */
- cds_list_for_each_entry(stream, &channel->stream_list.head, list) {
+ cds_list_for_each_entry_safe(stream, stmp, &channel->stream_list.head, list) {
trace_destroy_kernel_stream(stream);
}
/* For each event in the channel list */
- cds_list_for_each_entry(event, &channel->events_list.head, list) {
+ cds_list_for_each_entry_safe(event, etmp, &channel->events_list.head, list) {
trace_destroy_kernel_event(event);
}
void trace_destroy_kernel_session(struct ltt_kernel_session *session)
{
- struct ltt_kernel_channel *channel;
+ struct ltt_kernel_channel *channel, *ctmp;
DBG("[trace] Closing session fd %d", session->fd);
/* Close kernel fds */
trace_destroy_kernel_metadata(session->metadata);
}
- cds_list_for_each_entry(channel, &session->channel_list.head, list) {
+ cds_list_for_each_entry_safe(channel, ctmp, &session->channel_list.head, list) {
trace_destroy_kernel_channel(channel);
}