Applies to the kernel wildcard feature.
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
event->type = LTTNG_EVENT_TRACEPOINT; /* Hack */
ret = event_kernel_enable_event(kchan, event,
filter_expression, filter);
event->type = LTTNG_EVENT_TRACEPOINT; /* Hack */
ret = event_kernel_enable_event(kchan, event,
filter_expression, filter);
+ /* We have passed ownership */
+ filter_expression = NULL;
+ filter = NULL;
if (ret != LTTNG_OK) {
if (channel_created) {
/* Let's not leak a useless channel. */
if (ret != LTTNG_OK) {
if (channel_created) {
/* Let's not leak a useless channel. */
case LTTNG_EVENT_TRACEPOINT:
ret = event_kernel_enable_event(kchan, event,
filter_expression, filter);
case LTTNG_EVENT_TRACEPOINT:
ret = event_kernel_enable_event(kchan, event,
filter_expression, filter);
+ /* We have passed ownership */
+ filter_expression = NULL;
+ filter = NULL;
if (ret != LTTNG_OK) {
if (channel_created) {
/* Let's not leak a useless channel. */
if (ret != LTTNG_OK) {
if (channel_created) {
/* Let's not leak a useless channel. */
case LTTNG_EVENT_SYSCALL:
ret = event_kernel_enable_event(kchan, event,
filter_expression, filter);
case LTTNG_EVENT_SYSCALL:
ret = event_kernel_enable_event(kchan, event,
filter_expression, filter);
+ /* We have passed ownership */
+ filter_expression = NULL;
+ filter = NULL;
if (ret != LTTNG_OK) {
goto error;
}
if (ret != LTTNG_OK) {
goto error;
}
if (kevent == NULL) {
ret = kernel_create_event(event, kchan,
filter_expression, filter);
if (kevent == NULL) {
ret = kernel_create_event(event, kchan,
filter_expression, filter);
+ /* We have passed ownership */
+ filter_expression = NULL;
+ filter = NULL;
if (ret < 0) {
switch (-ret) {
case EEXIST:
if (ret < 0) {
switch (-ret) {
case EEXIST:
+ free(filter_expression);
+ free(filter);
assert(ev);
assert(channel);
assert(ev);
assert(channel);
+ /* We pass ownership of filter_expression and filter */
event = trace_kernel_create_event(ev, filter_expression,
filter);
if (event == NULL) {
event = trace_kernel_create_event(ev, filter_expression,
filter);
if (event == NULL) {
/*
* Allocate and initialize a kernel event. Set name and event type.
/*
* Allocate and initialize a kernel event. Set name and event type.
+ * We own filter_expression, and filter.
*
* Return pointer to structure or NULL.
*/
*
* Return pointer to structure or NULL.
*/
+ free(filter_expression);
+ free(filter);
free(lke);
free(attr);
return NULL;
free(lke);
free(attr);
return NULL;