X-Git-Url: http://git.efficios.com/?p=lttng-tools.git;a=blobdiff_plain;f=src%2Fbin%2Flttng-sessiond%2Fcmd.c;h=95e371d7b66fe527da607a7c60d0c49b871a2e63;hp=7eea28121e3e55394c67fc96ad484d4574b5f4da;hb=00a620843422e5c972aee0ada2181b811fc81b92;hpb=fac26884aa477a653fb72cc009fb14f970833baf diff --git a/src/bin/lttng-sessiond/cmd.c b/src/bin/lttng-sessiond/cmd.c index 7eea28121..95e371d7b 100644 --- a/src/bin/lttng-sessiond/cmd.c +++ b/src/bin/lttng-sessiond/cmd.c @@ -1485,18 +1485,48 @@ int cmd_enable_event(struct ltt_session *session, struct lttng_domain *domain, switch (event->type) { case LTTNG_EVENT_ALL: { + char *filter_expression_a = NULL; + struct lttng_filter_bytecode *filter_a = NULL; + + /* + * We need to duplicate filter_expression and filter, + * because ownership is passed to first enable + * event. + */ + if (filter_expression) { + filter_expression_a = strdup(filter_expression); + if (!filter_expression_a) { + ret = LTTNG_ERR_FATAL; + goto error; + } + } + if (filter) { + filter_a = zmalloc(sizeof(*filter_a) + filter->len); + if (!filter_a) { + free(filter_expression_a); + ret = LTTNG_ERR_FATAL; + goto error; + } + memcpy(filter_a, filter, sizeof(*filter_a) + filter->len); + } event->type = LTTNG_EVENT_TRACEPOINT; /* Hack */ - ret = event_kernel_enable_event(kchan, event); + ret = event_kernel_enable_event(kchan, event, + filter_expression, filter); if (ret != LTTNG_OK) { if (channel_created) { /* Let's not leak a useless channel. */ kernel_destroy_channel(kchan); } + free(filter_expression_a); + free(filter_a); goto error; } event->type = LTTNG_EVENT_SYSCALL; /* Hack */ - ret = event_kernel_enable_event(kchan, event); + ret = event_kernel_enable_event(kchan, event, + filter_expression_a, filter_a); if (ret != LTTNG_OK) { + free(filter_expression_a); + free(filter_a); goto error; } break; @@ -1505,7 +1535,8 @@ int cmd_enable_event(struct ltt_session *session, struct lttng_domain *domain, case LTTNG_EVENT_FUNCTION: case LTTNG_EVENT_FUNCTION_ENTRY: case LTTNG_EVENT_TRACEPOINT: - ret = event_kernel_enable_event(kchan, event); + ret = event_kernel_enable_event(kchan, event, + filter_expression, filter); if (ret != LTTNG_OK) { if (channel_created) { /* Let's not leak a useless channel. */ @@ -1515,7 +1546,8 @@ int cmd_enable_event(struct ltt_session *session, struct lttng_domain *domain, } break; case LTTNG_EVENT_SYSCALL: - ret = event_kernel_enable_event(kchan, event); + ret = event_kernel_enable_event(kchan, event, + filter_expression, filter); if (ret != LTTNG_OK) { goto error; }