Bug 1929482 - Make sure that strings live until serialization inside uprofiler_simple_event_marker_internal a=RyanVM

Original Revision: https://phabricator.services.mozilla.com/D257403

Differential Revision: https://phabricator.services.mozilla.com/D258229
This commit is contained in:
Nazım Can Altınova
2025-07-22 15:34:43 +00:00
committed by rvandermeulen@mozilla.com
parent ca20644765
commit b65dd1ed6c

View File

@@ -201,9 +201,10 @@ void uprofiler_simple_event_marker_internal(
} }
MOZ_ASSERT(num_args <= TraceMarker::MAX_NUM_ARGS); MOZ_ASSERT(num_args <= TraceMarker::MAX_NUM_ARGS);
TraceMarker::OptionsType tuple; TraceMarker::OptionsType tuple;
TraceOption* args[6] = {&std::get<0>(tuple), &std::get<1>(tuple), TraceOption* args[TraceMarker::MAX_NUM_ARGS] = {
&std::get<2>(tuple), &std::get<3>(tuple), &std::get<0>(tuple), &std::get<1>(tuple), &std::get<2>(tuple),
&std::get<4>(tuple), &std::get<5>(tuple)}; &std::get<3>(tuple), &std::get<4>(tuple), &std::get<5>(tuple)};
nsCString strValueContainers[TraceMarker::MAX_NUM_ARGS];
for (int i = 0; i < std::min(num_args, TraceMarker::MAX_NUM_ARGS); ++i) { for (int i = 0; i < std::min(num_args, TraceMarker::MAX_NUM_ARGS); ++i) {
auto& arg = *args[i]; auto& arg = *args[i];
arg.mPassed = true; arg.mPassed = true;
@@ -228,9 +229,10 @@ void uprofiler_simple_event_marker_internal(
->as_double); ->as_double);
break; break;
case TRACE_VALUE_TYPE_POINTER: case TRACE_VALUE_TYPE_POINTER:
arg.mValue = AsVariant(ProfilerString8View(nsPrintfCString( strValueContainers[i] = nsPrintfCString(
"%p", reinterpret_cast<const TraceValueUnion*>(&arg_values[i]) "%p", reinterpret_cast<const TraceValueUnion*>(&arg_values[i])
->as_pointer))); ->as_pointer);
arg.mValue = AsVariant(ProfilerString8View(strValueContainers[i]));
break; break;
case TRACE_VALUE_TYPE_STRING: case TRACE_VALUE_TYPE_STRING:
arg.mValue = AsVariant(ProfilerString8View::WrapNullTerminatedString( arg.mValue = AsVariant(ProfilerString8View::WrapNullTerminatedString(
@@ -238,14 +240,15 @@ void uprofiler_simple_event_marker_internal(
->as_string)); ->as_string));
break; break;
case TRACE_VALUE_TYPE_COPY_STRING: case TRACE_VALUE_TYPE_COPY_STRING:
arg.mValue = AsVariant(ProfilerString8View( strValueContainers[i] =
nsCString(reinterpret_cast<const TraceValueUnion*>(&arg_values[i]) reinterpret_cast<const TraceValueUnion*>(&arg_values[i])->as_string;
->as_string))); arg.mValue = AsVariant(ProfilerString8View(strValueContainers[i]));
break; break;
default: default:
MOZ_ASSERT_UNREACHABLE("Unexpected trace value type"); MOZ_ASSERT_UNREACHABLE("Unexpected trace value type");
arg.mValue = AsVariant(ProfilerString8View( strValueContainers[i] =
nsPrintfCString("Unexpected type: %u", arg_types[i]))); nsPrintfCString("Unexpected type: %u", arg_types[i]);
arg.mValue = AsVariant(ProfilerString8View(strValueContainers[i]));
break; break;
} }
} }