X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=src%2Flttng-event-notifier-notification.c;h=b39bfaad58545429beaf217badc56b81df7da3dc;hb=684a1e4d7e9a4cf1070e5202e419e1b9f6e9853c;hp=82424e8f0e91ea63849d00e8d538921de4d210a7;hpb=99f52fcce5865809584c1e022bca1409702ea292;p=lttng-modules.git diff --git a/src/lttng-event-notifier-notification.c b/src/lttng-event-notifier-notification.c index 82424e8f..b39bfaad 100644 --- a/src/lttng-event-notifier-notification.c +++ b/src/lttng-event-notifier-notification.c @@ -11,6 +11,7 @@ #include #include #include +#include /* * The capture buffer size needs to be below 1024 bytes to avoid the @@ -352,13 +353,23 @@ void record_error(struct lttng_event_notifier *event_notifier) { struct lttng_event_notifier_group *event_notifier_group = event_notifier->group; + struct lttng_counter *error_counter; size_t dimension_index[1]; int ret; + /* + * lttng_smp_load_acquire paired with lttng_smp_store_release orders + * creation of the error counter and setting error_counter_len + * before the error_counter is used. + */ + error_counter = lttng_smp_load_acquire(&event_notifier_group->error_counter); + /* This group may not have an error counter attached to it. */ + if (!error_counter) + return; + dimension_index[0] = event_notifier->error_counter_index; - ret = event_notifier_group->error_counter->ops->counter_add( - event_notifier_group->error_counter->counter, + ret = error_counter->ops->counter_add(error_counter->counter, dimension_index, 1); if (ret) WARN_ON_ONCE(1); @@ -415,7 +426,8 @@ void notification_send(struct lttng_event_notifier_notification *notif, void lttng_event_notifier_notification_send(struct lttng_event_notifier *event_notifier, struct lttng_probe_ctx *lttng_probe_ctx, - const char *stack_data) + const char *stack_data, + struct lttng_kernel_notifier_ctx *notif_ctx) { struct lttng_event_notifier_notification notif = { 0 }; int ret; @@ -429,7 +441,7 @@ void lttng_event_notifier_notification_send(struct lttng_event_notifier *event_n goto end; } - if (unlikely(!list_empty(&event_notifier->capture_bytecode_runtime_head))) { + if (unlikely(notif_ctx->eval_capture)) { struct lttng_bytecode_runtime *capture_bc_runtime; /* @@ -438,7 +450,7 @@ void lttng_event_notifier_notification_send(struct lttng_event_notifier *event_n * `output` parameter to the capture buffer. If the interpreter * fails, append an empty capture to the buffer. */ - list_for_each_entry(capture_bc_runtime, + list_for_each_entry_rcu(capture_bc_runtime, &event_notifier->capture_bytecode_runtime_head, node) { struct lttng_interpreter_output output;