X-Git-Url: http://git.liburcu.org/?a=blobdiff_plain;f=liblttng-ust%2Flttng-filter.c;h=bbc212892342f988041b025577de506eeaf0e029;hb=09434f96935202d1e6cf64a74d4da4b95d06246d;hp=d52658ae14dd7f4e135a5e6e0df306069bd94f4b;hpb=93c591bb3a90753ce66197f2c1e41c8ef554506f;p=lttng-ust.git diff --git a/liblttng-ust/lttng-filter.c b/liblttng-ust/lttng-filter.c index d52658ae..bbc21289 100644 --- a/liblttng-ust/lttng-filter.c +++ b/liblttng-ust/lttng-filter.c @@ -25,7 +25,11 @@ */ #define _LGPL_SOURCE +#include +#include + #include + #include "lttng-filter.h" static const char *opnames[] = { @@ -207,6 +211,9 @@ int apply_field_reloc(struct lttng_event *event, return -EINVAL; nr_fields = desc->nr_fields; for (i = 0; i < nr_fields; i++) { + if (fields[i].u.ext.nofilter) { + continue; + } if (!strcmp(fields[i].name, field_name)) { field = &fields[i]; break; @@ -215,10 +222,13 @@ int apply_field_reloc(struct lttng_event *event, switch (fields[i].type.atype) { case atype_integer: case atype_enum: + case atype_enum_nestable: field_offset += sizeof(int64_t); break; case atype_array: + case atype_array_nestable: case atype_sequence: + case atype_sequence_nestable: field_offset += sizeof(unsigned long); field_offset += sizeof(void *); break; @@ -251,10 +261,13 @@ int apply_field_reloc(struct lttng_event *event, switch (field->type.atype) { case atype_integer: case atype_enum: + case atype_enum_nestable: op->op = FILTER_OP_LOAD_FIELD_REF_S64; break; case atype_array: + case atype_array_nestable: case atype_sequence: + case atype_sequence_nestable: op->op = FILTER_OP_LOAD_FIELD_REF_SEQUENCE; break; case atype_string: @@ -326,12 +339,15 @@ int apply_context_reloc(struct lttng_event *event, switch (ctx_field->event_field.type.atype) { case atype_integer: case atype_enum: + case atype_enum_nestable: op->op = FILTER_OP_GET_CONTEXT_REF_S64; break; /* Sequence and array supported as string */ case atype_string: case atype_array: + case atype_array_nestable: case atype_sequence: + case atype_sequence_nestable: op->op = FILTER_OP_GET_CONTEXT_REF_STRING; break; case atype_float: @@ -434,7 +450,6 @@ int _lttng_filter_event_link_bytecode(struct lttng_event *event, } runtime->p.bc = filter_bytecode; runtime->p.session = event->chan->session; - runtime->p.event = event; runtime->len = filter_bytecode->bc.reloc_offset; /* copy original bytecode */ memcpy(runtime->code, filter_bytecode->bc.data, runtime->len); @@ -521,11 +536,12 @@ void lttng_enabler_event_link_bytecode(struct lttng_event *event, /* * Insert at specified priority (seqnum) in increasing - * order. + * order. If there already is a bytecode of the same priority, + * insert the new bytecode right after it. */ cds_list_for_each_entry_reverse(runtime, &event->bytecode_runtime_head, node) { - if (runtime->bc->bc.seqnum < bc->bc.seqnum) { + if (runtime->bc->bc.seqnum <= bc->bc.seqnum) { /* insert here */ insert_loc = &runtime->node; goto add_within; @@ -553,16 +569,6 @@ int lttng_filter_enabler_attach_bytecode(struct lttng_enabler *enabler, return 0; } -void lttng_free_enabler_filter_bytecode(struct lttng_enabler *enabler) -{ - struct lttng_ust_filter_bytecode_node *filter_bytecode, *tmp; - - cds_list_for_each_entry_safe(filter_bytecode, tmp, - &enabler->filter_bytecode_head, node) { - free(filter_bytecode); - } -} - void lttng_free_event_filter_runtime(struct lttng_event *event) { struct bytecode_runtime *runtime, *tmp;