From 20e3c7eceb9236eb646ab682c1cfb8b986aee3bf Mon Sep 17 00:00:00 2001 From: Gregory LEOCADIE Date: Thu, 25 Sep 2025 11:07:03 +0200 Subject: [PATCH 01/17] Bump to libdatadog v21 --- build/cmake/FindLibdatadog.cmake | 14 +++++++------- build/vcpkg_local_ports/libdatadog/portfile.cmake | 4 ++-- build/vcpkg_local_ports/libdatadog/vcpkg.json | 2 +- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/build/cmake/FindLibdatadog.cmake b/build/cmake/FindLibdatadog.cmake index 8fa55756bd06..1968802a60ca 100644 --- a/build/cmake/FindLibdatadog.cmake +++ b/build/cmake/FindLibdatadog.cmake @@ -4,12 +4,12 @@ endif() include(FetchContent) -set(LIBDATADOG_VERSION "v20.0.0" CACHE STRING "libdatadog version") +set(LIBDATADOG_VERSION "v21.0.0" CACHE STRING "libdatadog version") if(CMAKE_SYSTEM_NAME STREQUAL "Darwin") # For Darwin, we'll download both architectures and combine them - set(SHA256_LIBDATADOG_ARM64 "916a207ea1343744062ff44f421f198bc9d79ae2be7624f4ba355542ff03b7ec" CACHE STRING "libdatadog arm64 sha256") - set(SHA256_LIBDATADOG_X86_64 "879d213a5cbf982500833323828c862a5efc824afdb03628daa8f363e70cbfe9" CACHE STRING "libdatadog x86_64 sha256") + set(SHA256_LIBDATADOG_ARM64 "c1665c80fcd04ca27a2c59f3a9e0e140feb50ae25596f5290fa1a5a4f165b3f4" CACHE STRING "libdatadog arm64 sha256") + set(SHA256_LIBDATADOG_X86_64 "ab8b332406615a6de00db4d6353edcdeaa17aa8c905dafb570320bc453ddf9af" CACHE STRING "libdatadog x86_64 sha256") set(FILE_TO_DOWNLOAD_ARM64 libdatadog-aarch64-apple-darwin.tar.gz) set(FILE_TO_DOWNLOAD_X86_64 libdatadog-x86_64-apple-darwin.tar.gz) @@ -62,18 +62,18 @@ if(CMAKE_SYSTEM_NAME STREQUAL "Darwin") else() if(CMAKE_SYSTEM_PROCESSOR STREQUAL "aarch64" OR CMAKE_SYSTEM_PROCESSOR STREQUAL "arm64") if(DEFINED ENV{IsAlpine} AND "$ENV{IsAlpine}" MATCHES "true") - set(SHA256_LIBDATADOG "12791239d3d0bfeab8fc659d10dd64e8ccf9ad87aa3f293c3f509a57bf2b3ade" CACHE STRING "libdatadog sha256") + set(SHA256_LIBDATADOG "547aec1aeecae7bc12d6eb38a30eb6107777886c20dd335be917a40ecee4c23a" CACHE STRING "libdatadog sha256") set(FILE_TO_DOWNLOAD libdatadog-aarch64-alpine-linux-musl.tar.gz) else() - set(SHA256_LIBDATADOG "368903a0a73b700ba2a6a8aee91b2be49af9ef6077b684b9f1aace408f8917b1" CACHE STRING "libdatadog sha256") + set(SHA256_LIBDATADOG "14506ec3ddc23c4017ddb7ae98c78e0eb1a24cdfd924fc85bb2cabffc38a8556" CACHE STRING "libdatadog sha256") set(FILE_TO_DOWNLOAD libdatadog-aarch64-unknown-linux-gnu.tar.gz) endif() else() if(DEFINED ENV{IsAlpine} AND "$ENV{IsAlpine}" MATCHES "true") - set(SHA256_LIBDATADOG "bcf85135fea719aa192d176b08bb62056beff5d96ddbd114dfc28e50fcfea08c" CACHE STRING "libdatadog sha256") + set(SHA256_LIBDATADOG "6becd32b63cab8e5106a2d39823b2716c3c9fd130f1770aa2e27f5c1d0b05ac5" CACHE STRING "libdatadog sha256") set(FILE_TO_DOWNLOAD libdatadog-${CMAKE_SYSTEM_PROCESSOR}-alpine-linux-musl.tar.gz) else() - set(SHA256_LIBDATADOG "84b779bdaa3da7668795e264a5ac4b015185044d147a142727349026eb49d428" CACHE STRING "libdatadog sha256") + set(SHA256_LIBDATADOG "b958049329589502d87a2f37db992eec5e93886422d516118d2cd1d848ba3bb9" CACHE STRING "libdatadog sha256") set(FILE_TO_DOWNLOAD libdatadog-${CMAKE_SYSTEM_PROCESSOR}-unknown-linux-gnu.tar.gz) endif() endif() diff --git a/build/vcpkg_local_ports/libdatadog/portfile.cmake b/build/vcpkg_local_ports/libdatadog/portfile.cmake index 446069304fa5..7b2147989712 100644 --- a/build/vcpkg_local_ports/libdatadog/portfile.cmake +++ b/build/vcpkg_local_ports/libdatadog/portfile.cmake @@ -3,11 +3,11 @@ set(LIBDATADOG_VERSION ${VERSION}) if(TARGET_TRIPLET STREQUAL "x64-windows" OR TARGET_TRIPLET STREQUAL "x64-windows-static") set(PLATFORM "x64") - set(LIBDATADOG_HASH "f43b4e0a41a4f1d20995e13bc43b7d3502120c2809aefa177f3eea73db1f430e9de350f6f54bdadae09820ad7a492b7f054ec0180d94c33e44fb9a462ab3153a") + set(LIBDATADOG_HASH "0bf3701e53608756d4cdf4dd223a84635e77d5ce7982ac9d1510a5db6a49be5e87b78c8f094ebcfd3d7b676eb22ba5be7c3c01d2fe523c8329b6274d4f6aa146") elseif(TARGET_TRIPLET STREQUAL "x86-windows" OR TARGET_TRIPLET STREQUAL "x86-windows-static") set(PLATFORM "x86") - set(LIBDATADOG_HASH "9cdc780f52edcccf272098f46ee2200e2fa3d56b29be21b5bfc1bcf7943f9a0efd7b7d9e84ca6340e618ec92c4b19d7625d6907592027d4ca67241b08b9063a6") + set(LIBDATADOG_HASH "f5973af51e52a709ede358dd2215bf8ea93ef713ea360716eed9a71369f52a2095d5ab7960c7272bf30c4a22936b6cf04089f2863c4b5cfa835ed81aae1f2d39") else() message(FATAL_ERROR "Unsupported triplet: ${TARGET_TRIPLET}") endif() diff --git a/build/vcpkg_local_ports/libdatadog/vcpkg.json b/build/vcpkg_local_ports/libdatadog/vcpkg.json index 83e4b026f16d..505544c755e0 100644 --- a/build/vcpkg_local_ports/libdatadog/vcpkg.json +++ b/build/vcpkg_local_ports/libdatadog/vcpkg.json @@ -1,6 +1,6 @@ { "name": "libdatadog", - "version-string": "20.0.0", + "version-string": "21.0.0", "description": "Package providing libdatadog prebuilt binaries for Windows only.", "dependencies": [] } From cd0cf785f0f9076db7111d07ee2e95253f229389 Mon Sep 17 00:00:00 2001 From: Gregory LEOCADIE Date: Fri, 3 Oct 2025 09:37:58 +0200 Subject: [PATCH 02/17] Bump to libdatadog v22 --- build/cmake/FindLibdatadog.cmake | 14 +++++++------- build/vcpkg_local_ports/libdatadog/portfile.cmake | 4 ++-- build/vcpkg_local_ports/libdatadog/vcpkg.json | 2 +- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/build/cmake/FindLibdatadog.cmake b/build/cmake/FindLibdatadog.cmake index 1968802a60ca..ca281980a0e4 100644 --- a/build/cmake/FindLibdatadog.cmake +++ b/build/cmake/FindLibdatadog.cmake @@ -4,12 +4,12 @@ endif() include(FetchContent) -set(LIBDATADOG_VERSION "v21.0.0" CACHE STRING "libdatadog version") +set(LIBDATADOG_VERSION "v22.0.0" CACHE STRING "libdatadog version") if(CMAKE_SYSTEM_NAME STREQUAL "Darwin") # For Darwin, we'll download both architectures and combine them - set(SHA256_LIBDATADOG_ARM64 "c1665c80fcd04ca27a2c59f3a9e0e140feb50ae25596f5290fa1a5a4f165b3f4" CACHE STRING "libdatadog arm64 sha256") - set(SHA256_LIBDATADOG_X86_64 "ab8b332406615a6de00db4d6353edcdeaa17aa8c905dafb570320bc453ddf9af" CACHE STRING "libdatadog x86_64 sha256") + set(SHA256_LIBDATADOG_ARM64 "8982e04d45e9721a9ff7c8c28e8f25f8507458d73c2e0d7cacd315d39e170dba" CACHE STRING "libdatadog arm64 sha256") + set(SHA256_LIBDATADOG_X86_64 "1d47b9d63b91e97420f8b1da9393c3fc28ddfd65d09cf95aaef9ae2d5236c9b0" CACHE STRING "libdatadog x86_64 sha256") set(FILE_TO_DOWNLOAD_ARM64 libdatadog-aarch64-apple-darwin.tar.gz) set(FILE_TO_DOWNLOAD_X86_64 libdatadog-x86_64-apple-darwin.tar.gz) @@ -62,18 +62,18 @@ if(CMAKE_SYSTEM_NAME STREQUAL "Darwin") else() if(CMAKE_SYSTEM_PROCESSOR STREQUAL "aarch64" OR CMAKE_SYSTEM_PROCESSOR STREQUAL "arm64") if(DEFINED ENV{IsAlpine} AND "$ENV{IsAlpine}" MATCHES "true") - set(SHA256_LIBDATADOG "547aec1aeecae7bc12d6eb38a30eb6107777886c20dd335be917a40ecee4c23a" CACHE STRING "libdatadog sha256") + set(SHA256_LIBDATADOG "250bf6011a1ab3c177ed6743faf64457f8dd7ed4ed1a97af4683327407dd13ab" CACHE STRING "libdatadog sha256") set(FILE_TO_DOWNLOAD libdatadog-aarch64-alpine-linux-musl.tar.gz) else() - set(SHA256_LIBDATADOG "14506ec3ddc23c4017ddb7ae98c78e0eb1a24cdfd924fc85bb2cabffc38a8556" CACHE STRING "libdatadog sha256") + set(SHA256_LIBDATADOG "47367657799c6273315a25a70c5f9d7b3258fbd46bd3b6e74a85d509b3d3679c" CACHE STRING "libdatadog sha256") set(FILE_TO_DOWNLOAD libdatadog-aarch64-unknown-linux-gnu.tar.gz) endif() else() if(DEFINED ENV{IsAlpine} AND "$ENV{IsAlpine}" MATCHES "true") - set(SHA256_LIBDATADOG "6becd32b63cab8e5106a2d39823b2716c3c9fd130f1770aa2e27f5c1d0b05ac5" CACHE STRING "libdatadog sha256") + set(SHA256_LIBDATADOG "433d2d274543dbcccf055d708d93f7b07927ddca2273a87aedb82971e02f1e64" CACHE STRING "libdatadog sha256") set(FILE_TO_DOWNLOAD libdatadog-${CMAKE_SYSTEM_PROCESSOR}-alpine-linux-musl.tar.gz) else() - set(SHA256_LIBDATADOG "b958049329589502d87a2f37db992eec5e93886422d516118d2cd1d848ba3bb9" CACHE STRING "libdatadog sha256") + set(SHA256_LIBDATADOG "65a92ae10f264775082e67b29067d0d4712f0c24e600d6d4f819c5ef2ca8d257" CACHE STRING "libdatadog sha256") set(FILE_TO_DOWNLOAD libdatadog-${CMAKE_SYSTEM_PROCESSOR}-unknown-linux-gnu.tar.gz) endif() endif() diff --git a/build/vcpkg_local_ports/libdatadog/portfile.cmake b/build/vcpkg_local_ports/libdatadog/portfile.cmake index 7b2147989712..b08899845c99 100644 --- a/build/vcpkg_local_ports/libdatadog/portfile.cmake +++ b/build/vcpkg_local_ports/libdatadog/portfile.cmake @@ -3,11 +3,11 @@ set(LIBDATADOG_VERSION ${VERSION}) if(TARGET_TRIPLET STREQUAL "x64-windows" OR TARGET_TRIPLET STREQUAL "x64-windows-static") set(PLATFORM "x64") - set(LIBDATADOG_HASH "0bf3701e53608756d4cdf4dd223a84635e77d5ce7982ac9d1510a5db6a49be5e87b78c8f094ebcfd3d7b676eb22ba5be7c3c01d2fe523c8329b6274d4f6aa146") + set(LIBDATADOG_HASH "a65fd9bf56b008befa0d0fab37f83138a5b3128853d6b7539435a3af02bb1054c07011dae1be4a3be236087bca561858da4ffc0e357b94d5b7f7f3898e272339") elseif(TARGET_TRIPLET STREQUAL "x86-windows" OR TARGET_TRIPLET STREQUAL "x86-windows-static") set(PLATFORM "x86") - set(LIBDATADOG_HASH "f5973af51e52a709ede358dd2215bf8ea93ef713ea360716eed9a71369f52a2095d5ab7960c7272bf30c4a22936b6cf04089f2863c4b5cfa835ed81aae1f2d39") + set(LIBDATADOG_HASH "6cf2a1241b29a08c9ec09cb52d01457e5537f97c1f8e82f34b52b0a4776dc8334ad3d85f4ee3858f1c9c96005cd18c84081cb4e09512106e670c79c2fc8a2bbd") else() message(FATAL_ERROR "Unsupported triplet: ${TARGET_TRIPLET}") endif() diff --git a/build/vcpkg_local_ports/libdatadog/vcpkg.json b/build/vcpkg_local_ports/libdatadog/vcpkg.json index 505544c755e0..e27e57992df7 100644 --- a/build/vcpkg_local_ports/libdatadog/vcpkg.json +++ b/build/vcpkg_local_ports/libdatadog/vcpkg.json @@ -1,6 +1,6 @@ { "name": "libdatadog", - "version-string": "21.0.0", + "version-string": "22.0.0", "description": "Package providing libdatadog prebuilt binaries for Windows only.", "dependencies": [] } From 18fc4df5f1f60fc3f51c71b841f9fab7cf406e66 Mon Sep 17 00:00:00 2001 From: Gregory LEOCADIE Date: Fri, 3 Oct 2025 18:36:59 +0200 Subject: [PATCH 03/17] bump to libdatadog v22.0.1 --- build/cmake/FindLibdatadog.cmake | 14 +++++++------- build/vcpkg_local_ports/libdatadog/portfile.cmake | 4 ++-- build/vcpkg_local_ports/libdatadog/vcpkg.json | 2 +- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/build/cmake/FindLibdatadog.cmake b/build/cmake/FindLibdatadog.cmake index ca281980a0e4..1770fe03c201 100644 --- a/build/cmake/FindLibdatadog.cmake +++ b/build/cmake/FindLibdatadog.cmake @@ -4,12 +4,12 @@ endif() include(FetchContent) -set(LIBDATADOG_VERSION "v22.0.0" CACHE STRING "libdatadog version") +set(LIBDATADOG_VERSION "v22.0.1" CACHE STRING "libdatadog version") if(CMAKE_SYSTEM_NAME STREQUAL "Darwin") # For Darwin, we'll download both architectures and combine them - set(SHA256_LIBDATADOG_ARM64 "8982e04d45e9721a9ff7c8c28e8f25f8507458d73c2e0d7cacd315d39e170dba" CACHE STRING "libdatadog arm64 sha256") - set(SHA256_LIBDATADOG_X86_64 "1d47b9d63b91e97420f8b1da9393c3fc28ddfd65d09cf95aaef9ae2d5236c9b0" CACHE STRING "libdatadog x86_64 sha256") + set(SHA256_LIBDATADOG_ARM64 "36145902ed4d4cc9745315671f9ec5d33b7b1b3d76588353dfa79acd2e5f463a" CACHE STRING "libdatadog arm64 sha256") + set(SHA256_LIBDATADOG_X86_64 "afb55ef719d6f74b9240b5ea5b5afcddd532b03a620c25bfb978188bc081ecf9" CACHE STRING "libdatadog x86_64 sha256") set(FILE_TO_DOWNLOAD_ARM64 libdatadog-aarch64-apple-darwin.tar.gz) set(FILE_TO_DOWNLOAD_X86_64 libdatadog-x86_64-apple-darwin.tar.gz) @@ -62,18 +62,18 @@ if(CMAKE_SYSTEM_NAME STREQUAL "Darwin") else() if(CMAKE_SYSTEM_PROCESSOR STREQUAL "aarch64" OR CMAKE_SYSTEM_PROCESSOR STREQUAL "arm64") if(DEFINED ENV{IsAlpine} AND "$ENV{IsAlpine}" MATCHES "true") - set(SHA256_LIBDATADOG "250bf6011a1ab3c177ed6743faf64457f8dd7ed4ed1a97af4683327407dd13ab" CACHE STRING "libdatadog sha256") + set(SHA256_LIBDATADOG "1a9ace8904db9e5232732d43ec72b7c796866059614abec254b4c2c91665a5d0" CACHE STRING "libdatadog sha256") set(FILE_TO_DOWNLOAD libdatadog-aarch64-alpine-linux-musl.tar.gz) else() - set(SHA256_LIBDATADOG "47367657799c6273315a25a70c5f9d7b3258fbd46bd3b6e74a85d509b3d3679c" CACHE STRING "libdatadog sha256") + set(SHA256_LIBDATADOG "ec79b9a0b8d0163c04058c28455d083dc518ffdec9870698d87187abe059a825" CACHE STRING "libdatadog sha256") set(FILE_TO_DOWNLOAD libdatadog-aarch64-unknown-linux-gnu.tar.gz) endif() else() if(DEFINED ENV{IsAlpine} AND "$ENV{IsAlpine}" MATCHES "true") - set(SHA256_LIBDATADOG "433d2d274543dbcccf055d708d93f7b07927ddca2273a87aedb82971e02f1e64" CACHE STRING "libdatadog sha256") + set(SHA256_LIBDATADOG "c44cfc89d65b3e46964dccbf98508caf3e1897a295f6bdb798b65b692c74d520" CACHE STRING "libdatadog sha256") set(FILE_TO_DOWNLOAD libdatadog-${CMAKE_SYSTEM_PROCESSOR}-alpine-linux-musl.tar.gz) else() - set(SHA256_LIBDATADOG "65a92ae10f264775082e67b29067d0d4712f0c24e600d6d4f819c5ef2ca8d257" CACHE STRING "libdatadog sha256") + set(SHA256_LIBDATADOG "803c96e0d96e129d2dafd151d4d1209c7ad5d05e5002702ea0cd322a2133190a" CACHE STRING "libdatadog sha256") set(FILE_TO_DOWNLOAD libdatadog-${CMAKE_SYSTEM_PROCESSOR}-unknown-linux-gnu.tar.gz) endif() endif() diff --git a/build/vcpkg_local_ports/libdatadog/portfile.cmake b/build/vcpkg_local_ports/libdatadog/portfile.cmake index b08899845c99..641a896cdecf 100644 --- a/build/vcpkg_local_ports/libdatadog/portfile.cmake +++ b/build/vcpkg_local_ports/libdatadog/portfile.cmake @@ -3,11 +3,11 @@ set(LIBDATADOG_VERSION ${VERSION}) if(TARGET_TRIPLET STREQUAL "x64-windows" OR TARGET_TRIPLET STREQUAL "x64-windows-static") set(PLATFORM "x64") - set(LIBDATADOG_HASH "a65fd9bf56b008befa0d0fab37f83138a5b3128853d6b7539435a3af02bb1054c07011dae1be4a3be236087bca561858da4ffc0e357b94d5b7f7f3898e272339") + set(LIBDATADOG_HASH "fdc6e5f35342e8a8c0b4ca1e1b0e1a31cdbb82767428d491db2a93a1221c1fc3b3c774b827ab8edc2af2e77b9edffc99a289060abbb457b125d9e38bb090424d") elseif(TARGET_TRIPLET STREQUAL "x86-windows" OR TARGET_TRIPLET STREQUAL "x86-windows-static") set(PLATFORM "x86") - set(LIBDATADOG_HASH "6cf2a1241b29a08c9ec09cb52d01457e5537f97c1f8e82f34b52b0a4776dc8334ad3d85f4ee3858f1c9c96005cd18c84081cb4e09512106e670c79c2fc8a2bbd") + set(LIBDATADOG_HASH "b8acc35088a94f3e0547596dc761d3fc472b4cb73e7a7e141650f289f3e0ffee12a32705b4e3bfa20c94a1463c9d2d31106152fce07b1b8d7408394d866e2856") else() message(FATAL_ERROR "Unsupported triplet: ${TARGET_TRIPLET}") endif() diff --git a/build/vcpkg_local_ports/libdatadog/vcpkg.json b/build/vcpkg_local_ports/libdatadog/vcpkg.json index e27e57992df7..088b96ed58ad 100644 --- a/build/vcpkg_local_ports/libdatadog/vcpkg.json +++ b/build/vcpkg_local_ports/libdatadog/vcpkg.json @@ -1,6 +1,6 @@ { "name": "libdatadog", - "version-string": "22.0.0", + "version-string": "22.0.1", "description": "Package providing libdatadog prebuilt binaries for Windows only.", "dependencies": [] } From 3ce48b3b29c271687dcca9a49190b4913e65a4d7 Mon Sep 17 00:00:00 2001 From: Gregory LEOCADIE Date: Fri, 3 Oct 2025 20:14:20 +0200 Subject: [PATCH 04/17] TO REMOVE --- .../Datadog.Profiler.Native/CorProfilerCallback.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/profiler/src/ProfilerEngine/Datadog.Profiler.Native/CorProfilerCallback.cpp b/profiler/src/ProfilerEngine/Datadog.Profiler.Native/CorProfilerCallback.cpp index ea0ffc193ab4..355701a4f92b 100644 --- a/profiler/src/ProfilerEngine/Datadog.Profiler.Native/CorProfilerCallback.cpp +++ b/profiler/src/ProfilerEngine/Datadog.Profiler.Native/CorProfilerCallback.cpp @@ -3,6 +3,8 @@ // from dotnet coreclr includes +// TO REMOVE: only to trigger profiler tests +// #include "cor.h" #include "corprof.h" // end From ff7082eac1c11d1eeead7490ae3b838362b6eaf1 Mon Sep 17 00:00:00 2001 From: Gregory LEOCADIE Date: Mon, 6 Oct 2025 11:01:30 +0200 Subject: [PATCH 05/17] Fix bug in HandsOff config --- .../LibDatadog/HandsOffConfiguration/ConfiguratorHelper.cs | 5 +++-- tracer/src/Datadog.Trace/LibDatadog/NativeInterop.cs | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/tracer/src/Datadog.Trace/LibDatadog/HandsOffConfiguration/ConfiguratorHelper.cs b/tracer/src/Datadog.Trace/LibDatadog/HandsOffConfiguration/ConfiguratorHelper.cs index 753ca34487fe..2dab67792f27 100644 --- a/tracer/src/Datadog.Trace/LibDatadog/HandsOffConfiguration/ConfiguratorHelper.cs +++ b/tracer/src/Datadog.Trace/LibDatadog/HandsOffConfiguration/ConfiguratorHelper.cs @@ -35,6 +35,7 @@ internal static ConfigurationResult GetConfiguration(string? handsOffLocalConfig var configHandle = IntPtr.Zero; Error? resultError = null; LibraryConfigs? libraryConfigs = null; + LibraryConfigResult configurationResult = default; try { languageCs = new CharSlice(TracerConstants.Language); @@ -55,7 +56,7 @@ internal static ConfigurationResult GetConfiguration(string? handsOffLocalConfig NativeInterop.LibraryConfig.ConfiguratorWithFleetPath(configHandle, fleetPath.Value); } - var configurationResult = NativeInterop.LibraryConfig.ConfiguratorGet(configHandle); + configurationResult = NativeInterop.LibraryConfig.ConfiguratorGet(configHandle); var result = configurationResult.Result; if (configurationResult.Tag == ResultTag.Err) @@ -108,7 +109,7 @@ internal static ConfigurationResult GetConfiguration(string? handsOffLocalConfig if (libraryConfigs.HasValue) { - NativeInterop.LibraryConfig.LibraryConfigDrop(libraryConfigs.Value); + NativeInterop.LibraryConfig.LibraryConfigDrop(configurationResult); } if (configHandle != IntPtr.Zero) diff --git a/tracer/src/Datadog.Trace/LibDatadog/NativeInterop.cs b/tracer/src/Datadog.Trace/LibDatadog/NativeInterop.cs index c5b5b032d478..5d790dacdeaf 100644 --- a/tracer/src/Datadog.Trace/LibDatadog/NativeInterop.cs +++ b/tracer/src/Datadog.Trace/LibDatadog/NativeInterop.cs @@ -143,6 +143,6 @@ internal static extern TracerMemfdHandleResult StoreTracerMetadata( internal static extern void ConfiguratorDrop(IntPtr configurator); [DllImport(DllName, EntryPoint = "ddog_library_config_drop")] - internal static extern void LibraryConfigDrop(LibraryConfigs configs); + internal static extern void LibraryConfigDrop(LibraryConfigResult configs); } } From cca28987fb27a93ca310cb30085f69304d55e5c5 Mon Sep 17 00:00:00 2001 From: Damien MEHALA Date: Tue, 23 Sep 2025 15:48:49 +0200 Subject: [PATCH 06/17] [skip ci] fix: update process discovery FFI --- .../ConfiguratorHelper.cs | 5 ++- .../Datadog.Trace/LibDatadog/NativeInterop.cs | 23 ++++++------ .../ServiceDiscovery/MetadataKind.cs | 22 ++++++++++++ .../ServiceDiscoveryHelper.cs | 36 +++++++++++++------ 4 files changed, 62 insertions(+), 24 deletions(-) create mode 100644 tracer/src/Datadog.Trace/LibDatadog/ServiceDiscovery/MetadataKind.cs diff --git a/tracer/src/Datadog.Trace/LibDatadog/HandsOffConfiguration/ConfiguratorHelper.cs b/tracer/src/Datadog.Trace/LibDatadog/HandsOffConfiguration/ConfiguratorHelper.cs index 2dab67792f27..753ca34487fe 100644 --- a/tracer/src/Datadog.Trace/LibDatadog/HandsOffConfiguration/ConfiguratorHelper.cs +++ b/tracer/src/Datadog.Trace/LibDatadog/HandsOffConfiguration/ConfiguratorHelper.cs @@ -35,7 +35,6 @@ internal static ConfigurationResult GetConfiguration(string? handsOffLocalConfig var configHandle = IntPtr.Zero; Error? resultError = null; LibraryConfigs? libraryConfigs = null; - LibraryConfigResult configurationResult = default; try { languageCs = new CharSlice(TracerConstants.Language); @@ -56,7 +55,7 @@ internal static ConfigurationResult GetConfiguration(string? handsOffLocalConfig NativeInterop.LibraryConfig.ConfiguratorWithFleetPath(configHandle, fleetPath.Value); } - configurationResult = NativeInterop.LibraryConfig.ConfiguratorGet(configHandle); + var configurationResult = NativeInterop.LibraryConfig.ConfiguratorGet(configHandle); var result = configurationResult.Result; if (configurationResult.Tag == ResultTag.Err) @@ -109,7 +108,7 @@ internal static ConfigurationResult GetConfiguration(string? handsOffLocalConfig if (libraryConfigs.HasValue) { - NativeInterop.LibraryConfig.LibraryConfigDrop(configurationResult); + NativeInterop.LibraryConfig.LibraryConfigDrop(libraryConfigs.Value); } if (configHandle != IntPtr.Zero) diff --git a/tracer/src/Datadog.Trace/LibDatadog/NativeInterop.cs b/tracer/src/Datadog.Trace/LibDatadog/NativeInterop.cs index 5d790dacdeaf..1dfe587d13c5 100644 --- a/tracer/src/Datadog.Trace/LibDatadog/NativeInterop.cs +++ b/tracer/src/Datadog.Trace/LibDatadog/NativeInterop.cs @@ -116,16 +116,17 @@ internal static class Common internal static class LibraryConfig { - [DllImport(DllName, EntryPoint = "ddog_store_tracer_metadata")] - internal static extern TracerMemfdHandleResult StoreTracerMetadata( - byte schemaVersion, - CharSlice runtimeId, - CharSlice tracerLanguage, - CharSlice tracerVersion, - CharSlice hostname, - CharSlice serviceName, - CharSlice serviceEnv, - CharSlice serviceVersion); + [DllImport(DllName, EntryPoint = "ddog_tracer_metadata_new")] + internal static extern IntPtr TracerMetadataNew(); + + [DllImport(DllName, EntryPoint = "ddog_tracer_metadata_free")] + internal static extern void TracerMetadataFree(IntPtr metadata); + + [DllImport(DllName, EntryPoint = "ddog_tracer_metadata_set")] + internal static extern void TracerMetadataSet(IntPtr metadata, MetadataKind kind, CString value); + + [DllImport(DllName, EntryPoint = "ddog_tracer_metadata_store")] + internal static extern TracerMemfdHandleResult StoreTracerMetadata(IntPtr metadata); [DllImport(DllName, EntryPoint = "ddog_library_configurator_new")] internal static extern IntPtr ConfiguratorNew(byte debugLogs, CharSlice language); @@ -143,6 +144,6 @@ internal static extern TracerMemfdHandleResult StoreTracerMetadata( internal static extern void ConfiguratorDrop(IntPtr configurator); [DllImport(DllName, EntryPoint = "ddog_library_config_drop")] - internal static extern void LibraryConfigDrop(LibraryConfigResult configs); + internal static extern void LibraryConfigDrop(LibraryConfigs configs); } } diff --git a/tracer/src/Datadog.Trace/LibDatadog/ServiceDiscovery/MetadataKind.cs b/tracer/src/Datadog.Trace/LibDatadog/ServiceDiscovery/MetadataKind.cs new file mode 100644 index 000000000000..2595cdc26bb3 --- /dev/null +++ b/tracer/src/Datadog.Trace/LibDatadog/ServiceDiscovery/MetadataKind.cs @@ -0,0 +1,22 @@ +// +// Unless explicitly stated otherwise all files in this repository are licensed under the Apache 2 License. +// This product includes software developed at Datadog (https://www.datadoghq.com/). Copyright 2017 Datadog, Inc. +// + +#nullable enable +using System; + +namespace Datadog.Trace.LibDatadog.ServiceDiscovery; + +internal enum MetadataKind : int +{ + RuntimeId = 0, + TracerLanguage = 1, + TracerVersion = 2, + Hostname = 3, + ServiceName = 4, + ServiceEnvironment = 5, + ServiceVersion = 6, + ProcessTags = 7, + ContainerId = 8, +} diff --git a/tracer/src/Datadog.Trace/LibDatadog/ServiceDiscovery/ServiceDiscoveryHelper.cs b/tracer/src/Datadog.Trace/LibDatadog/ServiceDiscovery/ServiceDiscoveryHelper.cs index 542c30bd857a..5f5b31ab984d 100644 --- a/tracer/src/Datadog.Trace/LibDatadog/ServiceDiscovery/ServiceDiscoveryHelper.cs +++ b/tracer/src/Datadog.Trace/LibDatadog/ServiceDiscovery/ServiceDiscoveryHelper.cs @@ -31,7 +31,6 @@ internal static StoreMetadataResult StoreTracerMetadata(TracerSettings tracerSet try { var result = StoreTracerMetadata( - 1, Tracer.RuntimeId, TracerConstants.Language, TracerConstants.ThreePartVersion, @@ -66,7 +65,6 @@ internal static StoreMetadataResult StoreTracerMetadata(TracerSettings tracerSet } private static TracerMemfdHandleResult StoreTracerMetadata( - byte schemaVersion, string runtimeId, string tracerLanguage, string tracerVersion, @@ -75,14 +73,32 @@ private static TracerMemfdHandleResult StoreTracerMetadata( string? serviceEnv, string? serviceVersion) { - using var runtimeIdCharSlice = new CharSlice(runtimeId); - using var tracerLanguageCharSlice = new CharSlice(tracerLanguage); - using var tracerVersionCharSlice = new CharSlice(tracerVersion); - using var hostnameCharSlice = new CharSlice(hostname); - using var serviceNameCharSlice = new CharSlice(serviceName); - using var serviceEnvCharSlice = new CharSlice(serviceEnv); - using var serviceVersionCharSlice = new CharSlice(serviceVersion); + IntPtr ptr = IntPtr.Zero; + try + { + ptr = NativeInterop.LibraryConfig.TracerMetadataNew(); + SetMetadata(ptr, MetadataKind.RuntimeId, runtimeId); + SetMetadata(ptr, MetadataKind.TracerLanguage, tracerLanguage); + SetMetadata(ptr, MetadataKind.TracerVersion, tracerVersion); + SetMetadata(ptr, MetadataKind.Hostname, hostname); + SetMetadata(ptr, MetadataKind.ServiceName, serviceName); + SetMetadata(ptr, MetadataKind.ServiceEnvironment, serviceEnv); + SetMetadata(ptr, MetadataKind.ServiceVersion, serviceVersion); - return NativeInterop.LibraryConfig.StoreTracerMetadata(schemaVersion, runtimeIdCharSlice, tracerLanguageCharSlice, tracerVersionCharSlice, hostnameCharSlice, serviceNameCharSlice, serviceEnvCharSlice, serviceVersionCharSlice); + return NativeInterop.LibraryConfig.StoreTracerMetadata(ptr); + } + finally + { + if (ptr != IntPtr.Zero) + { + NativeInterop.LibraryConfig.TracerMetadataFree(ptr); + } + } + + void SetMetadata(IntPtr ptr, MetadataKind kind, string? value) + { + using var valueCharSlice = new CString(value); + NativeInterop.LibraryConfig.TracerMetadataSet(ptr, kind, valueCharSlice); + } } } From 66a3bd498f9df16b67d780bd24e3649c36656597 Mon Sep 17 00:00:00 2001 From: Gregory LEOCADIE Date: Tue, 7 Oct 2025 10:18:24 +0200 Subject: [PATCH 07/17] Changes according to libdatadog example --- .../ConfiguratorHelper.cs | 28 ++++++++----------- .../Datadog.Trace/LibDatadog/NativeInterop.cs | 2 +- 2 files changed, 12 insertions(+), 18 deletions(-) diff --git a/tracer/src/Datadog.Trace/LibDatadog/HandsOffConfiguration/ConfiguratorHelper.cs b/tracer/src/Datadog.Trace/LibDatadog/HandsOffConfiguration/ConfiguratorHelper.cs index 753ca34487fe..e09a68706f4d 100644 --- a/tracer/src/Datadog.Trace/LibDatadog/HandsOffConfiguration/ConfiguratorHelper.cs +++ b/tracer/src/Datadog.Trace/LibDatadog/HandsOffConfiguration/ConfiguratorHelper.cs @@ -33,8 +33,7 @@ internal static ConfigurationResult GetConfiguration(string? handsOffLocalConfig CString? localPath = null; CString? fleetPath = null; var configHandle = IntPtr.Zero; - Error? resultError = null; - LibraryConfigs? libraryConfigs = null; + LibraryConfigResult? configurationResult = null; try { languageCs = new CharSlice(TracerConstants.Language); @@ -55,18 +54,18 @@ internal static ConfigurationResult GetConfiguration(string? handsOffLocalConfig NativeInterop.LibraryConfig.ConfiguratorWithFleetPath(configHandle, fleetPath.Value); } - var configurationResult = NativeInterop.LibraryConfig.ConfiguratorGet(configHandle); - var result = configurationResult.Result; + configurationResult = NativeInterop.LibraryConfig.ConfiguratorGet(configHandle); + var result = configurationResult.Value.Result; - if (configurationResult.Tag == ResultTag.Err) + if (configurationResult.Value.Tag == ResultTag.Err) { - resultError = result.Error; - var error = resultError.Value.Message.ToUtf8String(); + var resultError = result.Error; + var error = resultError.Message.ToUtf8String(); return new ConfigurationResult(null, error, Result.LibDatadogCallError); } - libraryConfigs = result.Ok; - var configsLength = (int)libraryConfigs.Value.Length; + var libraryConfigs = result.Ok; + var configsLength = (int)libraryConfigs.Length; var configEntriesLocal = new Dictionary(); var configEntriesRemote = new Dictionary(); var structSize = Marshal.SizeOf(); @@ -74,7 +73,7 @@ internal static ConfigurationResult GetConfiguration(string? handsOffLocalConfig { unsafe { - var ptr = new IntPtr(libraryConfigs.Value.Ptr + (structSize * i)); + var ptr = new IntPtr(libraryConfigs.Ptr + (structSize * i)); var libraryConfig = (LibraryConfig*)ptr; var name = libraryConfig->Name.ToUtf8String(); var value = libraryConfig->Value.ToUtf8String(); @@ -100,15 +99,10 @@ internal static ConfigurationResult GetConfiguration(string? handsOffLocalConfig languageCs?.Dispose(); localPath?.Dispose(); fleetPath?.Dispose(); - if (resultError.HasValue) - { - var resultErrorValue = resultError.Value; - NativeInterop.Common.DropError(ref resultErrorValue); - } - if (libraryConfigs.HasValue) + if (configurationResult.HasValue) { - NativeInterop.LibraryConfig.LibraryConfigDrop(libraryConfigs.Value); + NativeInterop.LibraryConfig.LibraryConfigDrop(configurationResult.Value); } if (configHandle != IntPtr.Zero) diff --git a/tracer/src/Datadog.Trace/LibDatadog/NativeInterop.cs b/tracer/src/Datadog.Trace/LibDatadog/NativeInterop.cs index 1dfe587d13c5..833214b006fb 100644 --- a/tracer/src/Datadog.Trace/LibDatadog/NativeInterop.cs +++ b/tracer/src/Datadog.Trace/LibDatadog/NativeInterop.cs @@ -144,6 +144,6 @@ internal static class LibraryConfig internal static extern void ConfiguratorDrop(IntPtr configurator); [DllImport(DllName, EntryPoint = "ddog_library_config_drop")] - internal static extern void LibraryConfigDrop(LibraryConfigs configs); + internal static extern void LibraryConfigDrop(LibraryConfigResult configs); } } From cb0eba4bd946b02d524f363e7baf80602099c8ff Mon Sep 17 00:00:00 2001 From: Gregory LEOCADIE Date: Tue, 7 Oct 2025 10:40:10 +0200 Subject: [PATCH 08/17] Add mising logs field --- .../HandsOffConfiguration/InteropStructs/LibraryConfigs.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/tracer/src/Datadog.Trace/LibDatadog/HandsOffConfiguration/InteropStructs/LibraryConfigs.cs b/tracer/src/Datadog.Trace/LibDatadog/HandsOffConfiguration/InteropStructs/LibraryConfigs.cs index 4cbe3497e190..74882b42b1e8 100644 --- a/tracer/src/Datadog.Trace/LibDatadog/HandsOffConfiguration/InteropStructs/LibraryConfigs.cs +++ b/tracer/src/Datadog.Trace/LibDatadog/HandsOffConfiguration/InteropStructs/LibraryConfigs.cs @@ -14,4 +14,5 @@ internal struct LibraryConfigs public nint Ptr; // const LibraryConfig* public nuint Length; public nuint Capacity; + public CString Logs; // ffi::CString } From 5d6a0266fbb57e30d62e58c0f2f24f3d8cd6e7e9 Mon Sep 17 00:00:00 2001 From: Gregory LEOCADIE Date: Wed, 8 Oct 2025 10:47:24 +0200 Subject: [PATCH 09/17] Enable by default telemetry on mock agent --- tracer/test/Datadog.Trace.TestHelpers/MockTracerAgent.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tracer/test/Datadog.Trace.TestHelpers/MockTracerAgent.cs b/tracer/test/Datadog.Trace.TestHelpers/MockTracerAgent.cs index f4c9c4ee5500..88842da9f31b 100644 --- a/tracer/test/Datadog.Trace.TestHelpers/MockTracerAgent.cs +++ b/tracer/test/Datadog.Trace.TestHelpers/MockTracerAgent.cs @@ -119,7 +119,7 @@ protected MockTracerAgent(bool telemetryEnabled, TestTransports transport) /// public bool ShouldDeserializeTraces { get; set; } = true; - public static TcpUdpAgent Create(ITestOutputHelper output, int? port = null, int retries = 5, bool useStatsd = false, bool doNotBindPorts = false, int? requestedStatsDPort = null, bool useTelemetry = false, AgentConfiguration agentConfiguration = null) + public static TcpUdpAgent Create(ITestOutputHelper output, int? port = null, int retries = 5, bool useStatsd = false, bool doNotBindPorts = false, int? requestedStatsDPort = null, bool useTelemetry = true, AgentConfiguration agentConfiguration = null) => new TcpUdpAgent(port, retries, useStatsd, doNotBindPorts, requestedStatsDPort, useTelemetry) { Output = output, Configuration = agentConfiguration ?? new() }; #if NETCOREAPP3_1_OR_GREATER From 259caeb349b7bccaa11030f238f651963a64cc71 Mon Sep 17 00:00:00 2001 From: Julio Gonzalez Date: Fri, 10 Oct 2025 13:09:11 +0000 Subject: [PATCH 10/17] Disable telemetry in trace exporter --- .../LibDatadog/TraceExporterTests.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/tracer/test/Datadog.Trace.IntegrationTests/LibDatadog/TraceExporterTests.cs b/tracer/test/Datadog.Trace.IntegrationTests/LibDatadog/TraceExporterTests.cs index 62eb76c3bb7f..0305e1fb8554 100644 --- a/tracer/test/Datadog.Trace.IntegrationTests/LibDatadog/TraceExporterTests.cs +++ b/tracer/test/Datadog.Trace.IntegrationTests/LibDatadog/TraceExporterTests.cs @@ -144,6 +144,7 @@ Dictionary GetSettings() { ConfigurationKeys.ServiceVersion, "v1" }, { ConfigurationKeys.Environment, "test" }, { ConfigurationKeys.TraceDataPipelineEnabled, "true" }, + { ConfigurationKeys.Telemetry.Enabled, "false" }, }; switch (transport) From 101414a879e6189533755a4102b0cf9f6fcd5100 Mon Sep 17 00:00:00 2001 From: Julio Gonzalez Date: Fri, 10 Oct 2025 14:54:22 +0000 Subject: [PATCH 11/17] Fix test * Disable telemetry by default in the mock agent. * Enable telemetry explicitely in trace exporter tests. * Wait for telemetry payloads. --- .../LibDatadog/TraceExporterTests.cs | 11 +++++++---- .../test/Datadog.Trace.TestHelpers/MockTracerAgent.cs | 2 +- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/tracer/test/Datadog.Trace.IntegrationTests/LibDatadog/TraceExporterTests.cs b/tracer/test/Datadog.Trace.IntegrationTests/LibDatadog/TraceExporterTests.cs index 0305e1fb8554..14154f4c3db2 100644 --- a/tracer/test/Datadog.Trace.IntegrationTests/LibDatadog/TraceExporterTests.cs +++ b/tracer/test/Datadog.Trace.IntegrationTests/LibDatadog/TraceExporterTests.cs @@ -135,6 +135,10 @@ public async Task SendsTracesUsingDataPipeline(TestTransports transport) .And.AllSatisfy(rates => rates.Should().BeEquivalentTo(expectedRates)); sampleRateResponses.Should().ContainSingle(); + // Assert telemetry payloads were sent + var telemetry = await agent.WaitForLatestTelemetryAsync(t => t != null); + telemetry.Should().NotBeNull(); + Dictionary GetSettings() { var settingsMap = new Dictionary @@ -144,7 +148,6 @@ Dictionary GetSettings() { ConfigurationKeys.ServiceVersion, "v1" }, { ConfigurationKeys.Environment, "test" }, { ConfigurationKeys.TraceDataPipelineEnabled, "true" }, - { ConfigurationKeys.Telemetry.Enabled, "false" }, }; switch (transport) @@ -176,11 +179,11 @@ Dictionary GetSettings() MockTracerAgent GetAgent() => transport switch { - TestTransports.Tcp => MockTracerAgent.Create(null), - TestTransports.WindowsNamedPipe => MockTracerAgent.Create(null, new WindowsPipesConfig(pipeName, null)), + TestTransports.Tcp => MockTracerAgent.Create(null, useTelemetry: true), + TestTransports.WindowsNamedPipe => MockTracerAgent.Create(null, new WindowsPipesConfig(pipeName, null) { UseTelemetry = true }), #if NETCOREAPP3_1_OR_GREATER TestTransports.Uds - => MockTracerAgent.Create(null, new UnixDomainSocketConfig(udsPath, null)), + => MockTracerAgent.Create(null, new UnixDomainSocketConfig(udsPath, null) { UseTelemetry = true }), #endif _ => throw new InvalidOperationException("Unsupported transport type " + transport), }; diff --git a/tracer/test/Datadog.Trace.TestHelpers/MockTracerAgent.cs b/tracer/test/Datadog.Trace.TestHelpers/MockTracerAgent.cs index 88842da9f31b..f4c9c4ee5500 100644 --- a/tracer/test/Datadog.Trace.TestHelpers/MockTracerAgent.cs +++ b/tracer/test/Datadog.Trace.TestHelpers/MockTracerAgent.cs @@ -119,7 +119,7 @@ protected MockTracerAgent(bool telemetryEnabled, TestTransports transport) /// public bool ShouldDeserializeTraces { get; set; } = true; - public static TcpUdpAgent Create(ITestOutputHelper output, int? port = null, int retries = 5, bool useStatsd = false, bool doNotBindPorts = false, int? requestedStatsDPort = null, bool useTelemetry = true, AgentConfiguration agentConfiguration = null) + public static TcpUdpAgent Create(ITestOutputHelper output, int? port = null, int retries = 5, bool useStatsd = false, bool doNotBindPorts = false, int? requestedStatsDPort = null, bool useTelemetry = false, AgentConfiguration agentConfiguration = null) => new TcpUdpAgent(port, retries, useStatsd, doNotBindPorts, requestedStatsDPort, useTelemetry) { Output = output, Configuration = agentConfiguration ?? new() }; #if NETCOREAPP3_1_OR_GREATER From 03afbf1b4d35f0e65b6727341f0d87f31c4f7d60 Mon Sep 17 00:00:00 2001 From: Julio Gonzalez Date: Mon, 13 Oct 2025 09:01:35 +0000 Subject: [PATCH 12/17] Refactor test --- .../LibDatadog/TraceExporterTests.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tracer/test/Datadog.Trace.IntegrationTests/LibDatadog/TraceExporterTests.cs b/tracer/test/Datadog.Trace.IntegrationTests/LibDatadog/TraceExporterTests.cs index 14154f4c3db2..79eb77cabb40 100644 --- a/tracer/test/Datadog.Trace.IntegrationTests/LibDatadog/TraceExporterTests.cs +++ b/tracer/test/Datadog.Trace.IntegrationTests/LibDatadog/TraceExporterTests.cs @@ -136,8 +136,8 @@ public async Task SendsTracesUsingDataPipeline(TestTransports transport) sampleRateResponses.Should().ContainSingle(); // Assert telemetry payloads were sent - var telemetry = await agent.WaitForLatestTelemetryAsync(t => t != null); - telemetry.Should().NotBeNull(); + await agent.WaitForLatestTelemetryAsync(t => t != null); + agent.Telemetry.Should().NotBeNull(); Dictionary GetSettings() { From 5c34c41a7759aa84c2a4dd8417e8ab729bf67540 Mon Sep 17 00:00:00 2001 From: Julio Gonzalez Date: Mon, 13 Oct 2025 12:18:51 +0000 Subject: [PATCH 13/17] Test increasing the timeout --- .../LibDatadog/TraceExporterTests.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tracer/test/Datadog.Trace.IntegrationTests/LibDatadog/TraceExporterTests.cs b/tracer/test/Datadog.Trace.IntegrationTests/LibDatadog/TraceExporterTests.cs index 79eb77cabb40..7ccc86a1cfef 100644 --- a/tracer/test/Datadog.Trace.IntegrationTests/LibDatadog/TraceExporterTests.cs +++ b/tracer/test/Datadog.Trace.IntegrationTests/LibDatadog/TraceExporterTests.cs @@ -136,7 +136,7 @@ public async Task SendsTracesUsingDataPipeline(TestTransports transport) sampleRateResponses.Should().ContainSingle(); // Assert telemetry payloads were sent - await agent.WaitForLatestTelemetryAsync(t => t != null); + await agent.WaitForLatestTelemetryAsync(t => t != null, 60000); agent.Telemetry.Should().NotBeNull(); Dictionary GetSettings() From a2bf39f1ac4bc2492bdc1fd013c41caa133110c5 Mon Sep 17 00:00:00 2001 From: Julio Gonzalez Date: Tue, 14 Oct 2025 12:30:55 +0000 Subject: [PATCH 14/17] Revert timeout --- .../LibDatadog/TraceExporterTests.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tracer/test/Datadog.Trace.IntegrationTests/LibDatadog/TraceExporterTests.cs b/tracer/test/Datadog.Trace.IntegrationTests/LibDatadog/TraceExporterTests.cs index 7ccc86a1cfef..79eb77cabb40 100644 --- a/tracer/test/Datadog.Trace.IntegrationTests/LibDatadog/TraceExporterTests.cs +++ b/tracer/test/Datadog.Trace.IntegrationTests/LibDatadog/TraceExporterTests.cs @@ -136,7 +136,7 @@ public async Task SendsTracesUsingDataPipeline(TestTransports transport) sampleRateResponses.Should().ContainSingle(); // Assert telemetry payloads were sent - await agent.WaitForLatestTelemetryAsync(t => t != null, 60000); + await agent.WaitForLatestTelemetryAsync(t => t != null); agent.Telemetry.Should().NotBeNull(); Dictionary GetSettings() From d6753934e94bc142a85c85cb321428c809a0cc07 Mon Sep 17 00:00:00 2001 From: Julio Gonzalez Date: Fri, 17 Oct 2025 12:08:28 +0200 Subject: [PATCH 15/17] Bump libdatadog to 22.1.0 --- build/cmake/FindLibdatadog.cmake | 14 +++++++------- build/vcpkg_local_ports/libdatadog/portfile.cmake | 4 ++-- build/vcpkg_local_ports/libdatadog/vcpkg.json | 2 +- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/build/cmake/FindLibdatadog.cmake b/build/cmake/FindLibdatadog.cmake index 1770fe03c201..145861f4962f 100644 --- a/build/cmake/FindLibdatadog.cmake +++ b/build/cmake/FindLibdatadog.cmake @@ -4,12 +4,12 @@ endif() include(FetchContent) -set(LIBDATADOG_VERSION "v22.0.1" CACHE STRING "libdatadog version") +set(LIBDATADOG_VERSION "v22.1.0" CACHE STRING "libdatadog version") if(CMAKE_SYSTEM_NAME STREQUAL "Darwin") # For Darwin, we'll download both architectures and combine them - set(SHA256_LIBDATADOG_ARM64 "36145902ed4d4cc9745315671f9ec5d33b7b1b3d76588353dfa79acd2e5f463a" CACHE STRING "libdatadog arm64 sha256") - set(SHA256_LIBDATADOG_X86_64 "afb55ef719d6f74b9240b5ea5b5afcddd532b03a620c25bfb978188bc081ecf9" CACHE STRING "libdatadog x86_64 sha256") + set(SHA256_LIBDATADOG_ARM64 "2ace4fe2299638fdc32845359c10da02a58db458dd86c8c542deaf99a90e4c78" CACHE STRING "libdatadog arm64 sha256") + set(SHA256_LIBDATADOG_X86_64 "682fafc37dd17c8e3970efc798657f18dc5d8f07d277a577ef71e6a712c91a96" CACHE STRING "libdatadog x86_64 sha256") set(FILE_TO_DOWNLOAD_ARM64 libdatadog-aarch64-apple-darwin.tar.gz) set(FILE_TO_DOWNLOAD_X86_64 libdatadog-x86_64-apple-darwin.tar.gz) @@ -62,18 +62,18 @@ if(CMAKE_SYSTEM_NAME STREQUAL "Darwin") else() if(CMAKE_SYSTEM_PROCESSOR STREQUAL "aarch64" OR CMAKE_SYSTEM_PROCESSOR STREQUAL "arm64") if(DEFINED ENV{IsAlpine} AND "$ENV{IsAlpine}" MATCHES "true") - set(SHA256_LIBDATADOG "1a9ace8904db9e5232732d43ec72b7c796866059614abec254b4c2c91665a5d0" CACHE STRING "libdatadog sha256") + set(SHA256_LIBDATADOG "74be28884a318a3d8c3b37d4e2e2821f803917680464c18bae3f9a57f9827d1b" CACHE STRING "libdatadog sha256") set(FILE_TO_DOWNLOAD libdatadog-aarch64-alpine-linux-musl.tar.gz) else() - set(SHA256_LIBDATADOG "ec79b9a0b8d0163c04058c28455d083dc518ffdec9870698d87187abe059a825" CACHE STRING "libdatadog sha256") + set(SHA256_LIBDATADOG "cec1c38503d96ae0991a7e914aaf40e16ce23444bd3fda99532954ab8bb562ff" CACHE STRING "libdatadog sha256") set(FILE_TO_DOWNLOAD libdatadog-aarch64-unknown-linux-gnu.tar.gz) endif() else() if(DEFINED ENV{IsAlpine} AND "$ENV{IsAlpine}" MATCHES "true") - set(SHA256_LIBDATADOG "c44cfc89d65b3e46964dccbf98508caf3e1897a295f6bdb798b65b692c74d520" CACHE STRING "libdatadog sha256") + set(SHA256_LIBDATADOG "3f1815af29b6223357ca1961d18f3efada5be264e9034255c439de27e130e4b9" CACHE STRING "libdatadog sha256") set(FILE_TO_DOWNLOAD libdatadog-${CMAKE_SYSTEM_PROCESSOR}-alpine-linux-musl.tar.gz) else() - set(SHA256_LIBDATADOG "803c96e0d96e129d2dafd151d4d1209c7ad5d05e5002702ea0cd322a2133190a" CACHE STRING "libdatadog sha256") + set(SHA256_LIBDATADOG "e1d878e894ed6a60d12e60c71281dac0567cde56147cc6d76ac4b98b6849bdae" CACHE STRING "libdatadog sha256") set(FILE_TO_DOWNLOAD libdatadog-${CMAKE_SYSTEM_PROCESSOR}-unknown-linux-gnu.tar.gz) endif() endif() diff --git a/build/vcpkg_local_ports/libdatadog/portfile.cmake b/build/vcpkg_local_ports/libdatadog/portfile.cmake index 641a896cdecf..99f787e35860 100644 --- a/build/vcpkg_local_ports/libdatadog/portfile.cmake +++ b/build/vcpkg_local_ports/libdatadog/portfile.cmake @@ -3,11 +3,11 @@ set(LIBDATADOG_VERSION ${VERSION}) if(TARGET_TRIPLET STREQUAL "x64-windows" OR TARGET_TRIPLET STREQUAL "x64-windows-static") set(PLATFORM "x64") - set(LIBDATADOG_HASH "fdc6e5f35342e8a8c0b4ca1e1b0e1a31cdbb82767428d491db2a93a1221c1fc3b3c774b827ab8edc2af2e77b9edffc99a289060abbb457b125d9e38bb090424d") + set(LIBDATADOG_HASH "dcf282c7fba93e25eb41bde9671e6893b1faf2d57599ac75a37d32195a606bbeaf6b4af8c269cb622508ebd98770facba25b1c05efcc1a01d023c82d3800e9df") elseif(TARGET_TRIPLET STREQUAL "x86-windows" OR TARGET_TRIPLET STREQUAL "x86-windows-static") set(PLATFORM "x86") - set(LIBDATADOG_HASH "b8acc35088a94f3e0547596dc761d3fc472b4cb73e7a7e141650f289f3e0ffee12a32705b4e3bfa20c94a1463c9d2d31106152fce07b1b8d7408394d866e2856") + set(LIBDATADOG_HASH "afacd4320ed4f1c736a7301cee5e1f4064624283087870a7dd94768ba6d23854800fd0968bf8f845d400a2969dd5dcef91c4c7fe79e8295ec0ed7bac7d5b9d10") else() message(FATAL_ERROR "Unsupported triplet: ${TARGET_TRIPLET}") endif() diff --git a/build/vcpkg_local_ports/libdatadog/vcpkg.json b/build/vcpkg_local_ports/libdatadog/vcpkg.json index 088b96ed58ad..b521c9941451 100644 --- a/build/vcpkg_local_ports/libdatadog/vcpkg.json +++ b/build/vcpkg_local_ports/libdatadog/vcpkg.json @@ -1,6 +1,6 @@ { "name": "libdatadog", - "version-string": "22.0.1", + "version-string": "22.1.0", "description": "Package providing libdatadog prebuilt binaries for Windows only.", "dependencies": [] } From f0ef5295f5551e40be0f328d4baf2d2e44b2569d Mon Sep 17 00:00:00 2001 From: Julio Date: Wed, 22 Oct 2025 10:11:15 +0200 Subject: [PATCH 16/17] Add null terminator to CStrings. --- tracer/src/Datadog.Trace/LibDatadog/CString.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tracer/src/Datadog.Trace/LibDatadog/CString.cs b/tracer/src/Datadog.Trace/LibDatadog/CString.cs index db10f7ae0428..bda0e377f6a4 100644 --- a/tracer/src/Datadog.Trace/LibDatadog/CString.cs +++ b/tracer/src/Datadog.Trace/LibDatadog/CString.cs @@ -28,7 +28,7 @@ internal CString(string? str) { var encoding = StringEncoding.UTF8; var maxBytesCount = encoding.GetMaxByteCount(str.Length); - Ptr = Marshal.AllocHGlobal(maxBytesCount); + Ptr = Marshal.AllocHGlobal(maxBytesCount + 1); // +1 for null terminator unsafe { fixed (char* strPtr = str) @@ -36,6 +36,7 @@ internal CString(string? str) try { Length = (nuint)encoding.GetBytes(strPtr, str.Length, (byte*)Ptr, maxBytesCount); + *((byte*)Ptr + Length) = 0; // Add null terminator } catch { From 3b52168cd16b5a22a9d861d31962ce6eb5e053e9 Mon Sep 17 00:00:00 2001 From: Julio Date: Thu, 23 Oct 2025 18:28:55 +0200 Subject: [PATCH 17/17] Check bounds. --- tracer/src/Datadog.Trace/LibDatadog/CString.cs | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/tracer/src/Datadog.Trace/LibDatadog/CString.cs b/tracer/src/Datadog.Trace/LibDatadog/CString.cs index bda0e377f6a4..5acddd6f17a4 100644 --- a/tracer/src/Datadog.Trace/LibDatadog/CString.cs +++ b/tracer/src/Datadog.Trace/LibDatadog/CString.cs @@ -35,13 +35,23 @@ internal CString(string? str) { try { - Length = (nuint)encoding.GetBytes(strPtr, str.Length, (byte*)Ptr, maxBytesCount); + int bytesWritten = (nuint)encoding.GetBytes(strPtr, str.Length, (byte*)Ptr, maxBytesCount); + if (bytesWritten < 0 || bytesWritten > maxBytesCount) + { + Marshal.FreeHGlobal(Ptr); + Ptr = IntPtr.Zero; + Length = 0; + return; + } + + Length = (nuint)bytesWritten *((byte*)Ptr + Length) = 0; // Add null terminator } catch { Marshal.FreeHGlobal(Ptr); Ptr = IntPtr.Zero; + Length = 0; } } }