X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=ltt-sessiond%2Ftrace.c;h=94d3c4946619c8429614b9f091f4000a91dd5ccc;hb=def15da36e82f865ea2ff37dd73132741dfc3399;hp=d6bd7829d882e336f476e0f1ca8b8d55c71332e5;hpb=82a3637f639486c07ff937ab03e1e9532379d26a;p=lttng-tools.git diff --git a/ltt-sessiond/trace.c b/ltt-sessiond/trace.c index d6bd7829d..94d3c4946 100644 --- a/ltt-sessiond/trace.c +++ b/ltt-sessiond/trace.c @@ -138,7 +138,9 @@ struct ltt_kernel_channel *trace_create_kernel_channel(struct lttng_channel *cha 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); @@ -181,11 +183,22 @@ struct ltt_kernel_event *trace_create_kernel_event(struct lttng_event *ev) 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; @@ -197,11 +210,13 @@ struct ltt_kernel_event *trace_create_kernel_event(struct lttng_event *ev) /* 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; @@ -309,8 +324,8 @@ void trace_destroy_kernel_event(struct ltt_kernel_event *event) 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 */ @@ -320,12 +335,12 @@ void trace_destroy_kernel_channel(struct ltt_kernel_channel *channel) 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); } @@ -347,7 +362,7 @@ void trace_destroy_kernel_metadata(struct ltt_kernel_metadata *metadata) 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 */ @@ -361,7 +376,7 @@ void trace_destroy_kernel_session(struct ltt_kernel_session *session) 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); }