X-Git-Url: http://git.lttng.org./?a=blobdiff_plain;f=liblttng-ust%2Fevent-notifier-notification.c;h=422233265944f0dc991a90110f5027dabd508358;hb=9af5d97a36b0cd4ed5d5868855f03c810d171aad;hp=eb3c0bce1da35436cec17a21bb72f470349195d8;hpb=5469a374cdfeb3daa5d0f908f38ad427e3b753c9;p=lttng-ust.git diff --git a/liblttng-ust/event-notifier-notification.c b/liblttng-ust/event-notifier-notification.c index eb3c0bce..42223326 100644 --- a/liblttng-ust/event-notifier-notification.c +++ b/liblttng-ust/event-notifier-notification.c @@ -8,8 +8,11 @@ #include #include +#include + #include #include +#include #include "ust-events-internal.h" #include "../libmsgpack/msgpack.h" @@ -60,11 +63,11 @@ void capture_enum(struct lttng_msgpack_writer *writer, static int64_t capture_sequence_element_signed(uint8_t *ptr, - const struct lttng_integer_type *type) + struct lttng_ust_type_integer *integer_type) { int64_t value; - unsigned int size = type->size; - bool byte_order_reversed = type->reverse_byte_order; + unsigned int size = integer_type->size; + bool byte_order_reversed = integer_type->reverse_byte_order; switch (size) { case 8: @@ -109,11 +112,11 @@ int64_t capture_sequence_element_signed(uint8_t *ptr, static uint64_t capture_sequence_element_unsigned(uint8_t *ptr, - const struct lttng_integer_type *type) + struct lttng_ust_type_integer *integer_type) { uint64_t value; - unsigned int size = type->size; - bool byte_order_reversed = type->reverse_byte_order; + unsigned int size = integer_type->size; + bool byte_order_reversed = integer_type->reverse_byte_order; switch (size) { case 8: @@ -160,8 +163,8 @@ static void capture_sequence(struct lttng_msgpack_writer *writer, struct lttng_interpreter_output *output) { - const struct lttng_integer_type *integer_type; - const struct lttng_type *nested_type; + struct lttng_ust_type_integer *integer_type; + struct lttng_ust_type_common *nested_type; uint8_t *ptr; bool signedness; int i; @@ -170,13 +173,13 @@ void capture_sequence(struct lttng_msgpack_writer *writer, ptr = (uint8_t *) output->u.sequence.ptr; nested_type = output->u.sequence.nested_type; - switch (nested_type->atype) { - case atype_integer: - integer_type = &nested_type->u.integer; + switch (nested_type->type) { + case lttng_ust_type_integer: + integer_type = lttng_ust_get_type_integer(nested_type); break; - case atype_enum_nestable: + case lttng_ust_type_enum: /* Treat enumeration as an integer. */ - integer_type = &nested_type->u.enum_nestable.container_type->u.integer; + integer_type = lttng_ust_get_type_integer(lttng_ust_get_type_enum(nested_type)->container_type); break; default: /* Capture of array of non-integer are not supported. */ @@ -357,7 +360,8 @@ void notification_send(struct lttng_event_notifier_notification *notif, void lttng_event_notifier_notification_send( struct lttng_ust_event_notifier *event_notifier, - const char *stack_data) + const char *stack_data, + struct lttng_ust_notification_ctx *notif_ctx) { /* * This function is called from the probe, we must do dynamic @@ -367,7 +371,7 @@ void lttng_event_notifier_notification_send( notification_init(¬if, event_notifier); - if (caa_unlikely(!cds_list_empty(&event_notifier->capture_bytecode_runtime_head))) { + if (caa_unlikely(notif_ctx->eval_capture)) { struct lttng_ust_bytecode_runtime *capture_bc_runtime; /* @@ -376,12 +380,12 @@ void lttng_event_notifier_notification_send( * `output` parameter to the capture buffer. If the interpreter * fails, append an empty capture to the buffer. */ - cds_list_for_each_entry(capture_bc_runtime, - &event_notifier->capture_bytecode_runtime_head, node) { + cds_list_for_each_entry_rcu(capture_bc_runtime, + &event_notifier->priv->capture_bytecode_runtime_head, node) { struct lttng_interpreter_output output; - if (capture_bc_runtime->interpreter_funcs.capture(capture_bc_runtime, - stack_data, &output) & LTTNG_INTERPRETER_RECORD_FLAG) + if (capture_bc_runtime->interpreter_func(capture_bc_runtime, + stack_data, &output) == LTTNG_UST_BYTECODE_INTERPRETER_OK) notification_append_capture(¬if, &output); else notification_append_empty_capture(¬if);