X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;ds=sidebyside;f=src%2Fbin%2Flttng-sessiond%2Fevent.c;h=5acb4790b3ca8dcf3fab4cfa02fbda91066be7be;hb=d3a56674bd25163dcd13140ceb5781da8b30dcd3;hp=402a386ceff788be501386df7bc155c40203e62e;hpb=025faf73cdb6942ebf437dc4c4f6631f0134b128;p=lttng-tools.git diff --git a/src/bin/lttng-sessiond/event.c b/src/bin/lttng-sessiond/event.c index 402a386ce..5acb4790b 100644 --- a/src/bin/lttng-sessiond/event.c +++ b/src/bin/lttng-sessiond/event.c @@ -60,6 +60,8 @@ static void add_unique_ust_event(struct lttng_ht *ht, */ static void init_syscalls_kernel_event(struct lttng_event *event) { + assert(event); + event->name[0] = '\0'; /* * We use LTTNG_EVENT* here since the trace kernel creation will make the @@ -71,12 +73,14 @@ static void init_syscalls_kernel_event(struct lttng_event *event) /* * Disable kernel tracepoint event for a channel from the kernel session. */ -int event_kernel_disable_tracepoint(struct ltt_kernel_session *ksession, - struct ltt_kernel_channel *kchan, char *event_name) +int event_kernel_disable_tracepoint(struct ltt_kernel_channel *kchan, + char *event_name) { int ret; struct ltt_kernel_event *kevent; + assert(kchan); + kevent = trace_kernel_get_event_by_name(event_name, kchan); if (kevent == NULL) { ret = LTTNG_ERR_NO_EVENT; @@ -101,12 +105,13 @@ error: /* * Disable kernel tracepoint events for a channel from the kernel session. */ -int event_kernel_disable_all_tracepoints(struct ltt_kernel_session *ksession, - struct ltt_kernel_channel *kchan) +int event_kernel_disable_all_tracepoints(struct ltt_kernel_channel *kchan) { int ret; struct ltt_kernel_event *kevent; + assert(kchan); + /* For each event in the kernel session */ cds_list_for_each_entry(kevent, &kchan->events_list.head, list) { ret = kernel_disable_event(kevent); @@ -122,8 +127,7 @@ int event_kernel_disable_all_tracepoints(struct ltt_kernel_session *ksession, /* * Disable kernel syscall events for a channel from the kernel session. */ -int event_kernel_disable_all_syscalls(struct ltt_kernel_session *ksession, - struct ltt_kernel_channel *kchan) +int event_kernel_disable_all_syscalls(struct ltt_kernel_channel *kchan) { ERR("Cannot disable syscall tracing for existing session. Please destroy session instead."); return LTTNG_OK; /* Return OK so disable all succeeds */ @@ -132,27 +136,31 @@ int event_kernel_disable_all_syscalls(struct ltt_kernel_session *ksession, /* * Disable all kernel event for a channel from the kernel session. */ -int event_kernel_disable_all(struct ltt_kernel_session *ksession, - struct ltt_kernel_channel *kchan) +int event_kernel_disable_all(struct ltt_kernel_channel *kchan) { int ret; - ret = event_kernel_disable_all_tracepoints(ksession, kchan); + assert(kchan); + + ret = event_kernel_disable_all_tracepoints(kchan); if (ret != LTTNG_OK) return ret; - ret = event_kernel_disable_all_syscalls(ksession, kchan); + ret = event_kernel_disable_all_syscalls(kchan); return ret; } /* * Enable kernel tracepoint event for a channel from the kernel session. */ -int event_kernel_enable_tracepoint(struct ltt_kernel_session *ksession, - struct ltt_kernel_channel *kchan, struct lttng_event *event) +int event_kernel_enable_tracepoint(struct ltt_kernel_channel *kchan, + struct lttng_event *event) { int ret; struct ltt_kernel_event *kevent; + assert(kchan); + assert(event); + kevent = trace_kernel_get_event_by_name(event->name, kchan); if (kevent == NULL) { ret = kernel_create_event(event, kchan); @@ -190,13 +198,15 @@ end: /* * Enable all kernel tracepoint events of a channel of the kernel session. */ -int event_kernel_enable_all_tracepoints(struct ltt_kernel_session *ksession, - struct ltt_kernel_channel *kchan, int kernel_tracer_fd) +int event_kernel_enable_all_tracepoints(struct ltt_kernel_channel *kchan, + int kernel_tracer_fd) { int size, i, ret; struct ltt_kernel_event *kevent; struct lttng_event *event_list = NULL; + assert(kchan); + /* For each event in the kernel session */ cds_list_for_each_entry(kevent, &kchan->events_list.head, list) { if (kevent->enabled == 0) { @@ -231,18 +241,19 @@ int event_kernel_enable_all_tracepoints(struct ltt_kernel_session *ksession, ret = LTTNG_OK; end: return ret; - } /* * Enable all kernel tracepoint events of a channel of the kernel session. */ -int event_kernel_enable_all_syscalls(struct ltt_kernel_session *ksession, - struct ltt_kernel_channel *kchan, int kernel_tracer_fd) +int event_kernel_enable_all_syscalls(struct ltt_kernel_channel *kchan, + int kernel_tracer_fd) { int ret; struct lttng_event event; + assert(kchan); + init_syscalls_kernel_event(&event); DBG("Enabling all syscall tracing"); @@ -265,12 +276,14 @@ end: /* * Enable all kernel events of a channel of the kernel session. */ -int event_kernel_enable_all(struct ltt_kernel_session *ksession, - struct ltt_kernel_channel *kchan, int kernel_tracer_fd) +int event_kernel_enable_all(struct ltt_kernel_channel *kchan, + int kernel_tracer_fd) { int tp_ret; - tp_ret = event_kernel_enable_all_tracepoints(ksession, kchan, kernel_tracer_fd); + assert(kchan); + + tp_ret = event_kernel_enable_all_tracepoints(kchan, kernel_tracer_fd); if (tp_ret != LTTNG_OK) { goto end; } @@ -284,7 +297,7 @@ int event_kernel_enable_all(struct ltt_kernel_session *ksession, * tracepoints did not fail. Future work will allow us to send back * multiple errors to the client in one API call. */ - (void) event_kernel_enable_all_syscalls(ksession, kchan, kernel_tracer_fd); + (void) event_kernel_enable_all_syscalls(kchan, kernel_tracer_fd); end: return tp_ret; @@ -307,6 +320,9 @@ int event_ust_enable_all_tracepoints(struct ltt_ust_session *usess, int domain, struct ltt_ust_event *uevent = NULL; struct lttng_event *events = NULL; + assert(usess); + assert(uchan); + rcu_read_lock(); switch (domain) { @@ -412,6 +428,10 @@ int event_ust_enable_tracepoint(struct ltt_ust_session *usess, int domain, int ret = LTTNG_OK, to_create = 0; struct ltt_ust_event *uevent; + assert(usess); + assert(uchan); + assert(event); + rcu_read_lock(); uevent = trace_ust_find_event(uchan->events, event->name, filter, @@ -429,7 +449,7 @@ int event_ust_enable_tracepoint(struct ltt_ust_session *usess, int domain, if (uevent->enabled) { /* It's already enabled so everything is OK */ - ret = LTTNG_OK; + ret = LTTNG_ERR_UST_EVENT_ENABLED; goto end; } @@ -509,6 +529,10 @@ int event_ust_disable_tracepoint(struct ltt_ust_session *usess, int domain, struct lttng_ht_iter iter; struct lttng_ht *ht; + assert(usess); + assert(uchan); + assert(event_name); + ht = uchan->events; rcu_read_lock(); @@ -583,6 +607,9 @@ int event_ust_disable_all_tracepoints(struct ltt_ust_session *usess, int domain, struct ltt_ust_event *uevent = NULL; struct lttng_event *events = NULL; + assert(usess); + assert(uchan); + rcu_read_lock(); switch (domain) {