X-Git-Url: http://git.lttng.org/?a=blobdiff_plain;f=liblttng-ust%2Flttng-filter.c;h=bbc212892342f988041b025577de506eeaf0e029;hb=35cbacdb34948e328f5d360f2fd76618dd678e2f;hp=ee562dd0f6a61a1193989ba7e27cf4cf046047cb;hpb=fe65ab8285a8763a93c21860f4f5e4c68e756255;p=lttng-ust.git diff --git a/liblttng-ust/lttng-filter.c b/liblttng-ust/lttng-filter.c index ee562dd0..bbc21289 100644 --- a/liblttng-ust/lttng-filter.c +++ b/liblttng-ust/lttng-filter.c @@ -211,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; @@ -219,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; @@ -255,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: @@ -330,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: @@ -438,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); @@ -525,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;