From 00a5238c3c00376d9bb6ea0f9829b9cdbee143be Mon Sep 17 00:00:00 2001 From: Ivo Anjo Date: Wed, 9 Mar 2022 13:52:45 +0000 Subject: [PATCH] Update to use new ddprof `File` struct See https://github.com/DataDog/libddprof/pull/33 for details. --- .../http_transport.c | 33 +++++++------------ 1 file changed, 12 insertions(+), 21 deletions(-) diff --git a/ext/ddtrace_profiling_native_extension/http_transport.c b/ext/ddtrace_profiling_native_extension/http_transport.c index 384d094dd9e..c44f26d00a7 100644 --- a/ext/ddtrace_profiling_native_extension/http_transport.c +++ b/ext/ddtrace_profiling_native_extension/http_transport.c @@ -248,7 +248,8 @@ static ddprof_ffi_Request *build_request( Check_Type(code_provenance_file_name, T_STRING); // Code provenance can be disabled and in that case will be set to nil - if (!NIL_P(code_provenance_data)) Check_Type(code_provenance_data, T_STRING); + bool have_code_provenance = !NIL_P(code_provenance_data); + if (have_code_provenance) Check_Type(code_provenance_data, T_STRING); uint64_t timeout_milliseconds = NUM2ULONG(upload_timeout_milliseconds); @@ -257,34 +258,24 @@ static ddprof_ffi_Request *build_request( ddprof_ffi_Timespec finish = {.seconds = NUM2LONG(finish_timespec_seconds), .nanoseconds = NUM2UINT(finish_timespec_nanoseconds)}; - int files_to_report = 1 + (NIL_P(code_provenance_data) ? 0 : 1); - + int files_to_report = 1 + (have_code_provenance ? 1 : 0); ddprof_ffi_File files[files_to_report]; ddprof_ffi_Slice_file slice_files = {.ptr = files, .len = files_to_report}; - ddprof_ffi_Buffer *pprof_buffer = - ddprof_ffi_Buffer_from_byte_slice((ddprof_ffi_ByteSlice) { - .ptr = (uint8_t *) StringValuePtr(pprof_data), - .len = RSTRING_LEN(pprof_data) - }); - - files[0] = (ddprof_ffi_File) {.name = byte_slice_from_ruby_string(pprof_file_name), .file = pprof_buffer}; - - if (!NIL_P(code_provenance_data)) { - ddprof_ffi_Buffer *code_provenance_buffer = - ddprof_ffi_Buffer_from_byte_slice((ddprof_ffi_ByteSlice) { - .ptr = (uint8_t *) StringValuePtr(code_provenance_data), - .len = RSTRING_LEN(code_provenance_data) - }); - - files[1] = (ddprof_ffi_File) {.name = byte_slice_from_ruby_string(code_provenance_file_name), .file = code_provenance_buffer}; + files[0] = (ddprof_ffi_File) { + .name = byte_slice_from_ruby_string(pprof_file_name), + .file = byte_slice_from_ruby_string(pprof_data) + }; + if (have_code_provenance) { + files[1] = (ddprof_ffi_File) { + .name = byte_slice_from_ruby_string(code_provenance_file_name), + .file = byte_slice_from_ruby_string(code_provenance_data) + }; } ddprof_ffi_Request *request = ddprof_ffi_ProfileExporterV3_build(exporter, start, finish, slice_files, timeout_milliseconds); - // We don't need to free pprof_buffer nor code_provenance_buffer because libddprof takes care of it. - return request; }