X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=src%2Fbin%2Flttng-sessiond%2Fust-app.cpp;h=8addb5edacabb5bd9ed2397ab81f276cf5b078fb;hb=63c3462c3dbd028a08f7a9b504c45e178371248d;hp=88db75f8f4d7da8f1f2ae5cc3d7978cae26fafdd;hpb=6d31b87d46a9301fe86d273616ab3d7214d24e65;p=lttng-tools.git diff --git a/src/bin/lttng-sessiond/ust-app.cpp b/src/bin/lttng-sessiond/ust-app.cpp index 88db75f8f..8addb5eda 100644 --- a/src/bin/lttng-sessiond/ust-app.cpp +++ b/src/bin/lttng-sessiond/ust-app.cpp @@ -6426,23 +6426,49 @@ static int handle_app_register_channel_notification(int sock, * that all apps provide the same typing for the context fields as a * sanity check. */ - lst::type::cuptr context_fields = lttng::make_unique(0, - lsu::create_trace_fields_from_ust_ctl_fields(*locked_registry_session, - ust_ctl_context_fields.get(), context_field_count)); + try { + auto app_context_fields = lsu::create_trace_fields_from_ust_ctl_fields( + *locked_registry_session, ust_ctl_context_fields.get(), + context_field_count, + lst::field_location::root::EVENT_RECORD_COMMON_CONTEXT, + lsu::ctl_field_quirks::UNDERSCORE_PREFIXED_VARIANT_TAG_MAPPINGS); + + if (!ust_reg_chan.is_registered()) { + lst::type::cuptr event_context = app_context_fields.size() ? + lttng::make_unique( + 0, std::move(app_context_fields)) : + nullptr; + + ust_reg_chan.set_event_context(std::move(event_context)); + } else { + /* + * Validate that the context fields match between + * registry and newcoming application. + */ + bool context_fields_match; + const auto *previous_event_context = ust_reg_chan.get_event_context(); - if (!ust_reg_chan.is_registered()) { - ust_reg_chan.set_context(std::move(context_fields)); - } else { - /* - * Validate that the context fields match between - * registry and newcoming application. - */ - if (ust_reg_chan.get_context() != *context_fields) { - ERR("Registering application channel due to context field mismatch: pid = %d, sock = %d", - app->pid, app->sock); - ret_code = -EINVAL; - goto reply; + if (!previous_event_context) { + context_fields_match = app_context_fields.size() == 0; + } else { + const lst::structure_type app_event_context_struct( + 0, std::move(app_context_fields)); + + context_fields_match = *previous_event_context == + app_event_context_struct; + } + + if (!context_fields_match) { + ERR("Registering application channel due to context field mismatch: pid = %d, sock = %d", + app->pid, app->sock); + ret_code = -EINVAL; + goto reply; + } } + } catch (std::exception& ex) { + ERR("Failed to handle application context: %s", ex.what()); + ret_code = -EINVAL; + goto reply; } reply: @@ -6539,12 +6565,16 @@ static int add_event_ust_registry(int sock, int sobjd, int cobjd, const char *na channel.add_event(sobjd, cobjd, name, signature.get(), lsu::create_trace_fields_from_ust_ctl_fields( *locked_registry, fields.get(), - nr_fields), + nr_fields, + lst::field_location::root:: + EVENT_RECORD_PAYLOAD, + lsu::ctl_field_quirks:: + UNDERSCORE_PREFIXED_VARIANT_TAG_MAPPINGS), loglevel_value, model_emf_uri.get() ? nonstd::optional( model_emf_uri.get()) : - nonstd::nullopt, + nonstd::nullopt, ua_sess->buffer_type, *app, event_id); ret_code = 0; } catch (const std::exception& ex) {