libdatadog 40.0.0.2.0 → 45.0.0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (100) hide show
  1. checksums.yaml +4 -4
  2. data/lib/libdatadog/version.rb +2 -2
  3. data/vendor/{libdatadog-40.0.0/aarch64-linux-musl → libdatadog-45.0.0/aarch64-linux}/LICENSE-3rdparty.csv +15 -12
  4. data/vendor/{libdatadog-40.0.0 → libdatadog-45.0.0}/aarch64-linux/bin/libdatadog-crashtracking-receiver +0 -0
  5. data/vendor/{libdatadog-40.0.0/x86_64-linux-musl → libdatadog-45.0.0/aarch64-linux}/include/datadog/common.h +176 -122
  6. data/vendor/{libdatadog-40.0.0/arm64-darwin → libdatadog-45.0.0/aarch64-linux}/include/datadog/data-pipeline.h +79 -9
  7. data/vendor/{libdatadog-40.0.0 → libdatadog-45.0.0}/aarch64-linux/include/datadog/ffe.h +12 -0
  8. data/vendor/{libdatadog-40.0.0/aarch64-linux-musl → libdatadog-45.0.0/aarch64-linux}/include/datadog/library-config.h +47 -24
  9. data/vendor/{libdatadog-40.0.0/x86_64-linux-musl → libdatadog-45.0.0/aarch64-linux}/include/datadog/otel-thread-ctx.h +35 -5
  10. data/vendor/{libdatadog-40.0.0 → libdatadog-45.0.0}/aarch64-linux/lib/libdatadog_profiling.so +0 -0
  11. data/vendor/{libdatadog-40.0.0/arm64-darwin → libdatadog-45.0.0/aarch64-linux}/lib/pkgconfig/datadog_profiling_with_rpath.pc +1 -1
  12. data/vendor/{libdatadog-40.0.0/arm64-darwin → libdatadog-45.0.0/aarch64-linux-musl}/LICENSE-3rdparty.csv +15 -12
  13. data/vendor/{libdatadog-40.0.0 → libdatadog-45.0.0}/aarch64-linux-musl/bin/libdatadog-crashtracking-receiver +0 -0
  14. data/vendor/{libdatadog-40.0.0/arm64-darwin → libdatadog-45.0.0/aarch64-linux-musl}/include/datadog/common.h +176 -122
  15. data/vendor/{libdatadog-40.0.0/aarch64-linux → libdatadog-45.0.0/aarch64-linux-musl}/include/datadog/data-pipeline.h +79 -9
  16. data/vendor/{libdatadog-40.0.0 → libdatadog-45.0.0}/aarch64-linux-musl/include/datadog/ffe.h +12 -0
  17. data/vendor/{libdatadog-40.0.0/arm64-darwin → libdatadog-45.0.0/aarch64-linux-musl}/include/datadog/library-config.h +47 -24
  18. data/vendor/{libdatadog-40.0.0/arm64-darwin → libdatadog-45.0.0/aarch64-linux-musl}/include/datadog/otel-thread-ctx.h +35 -5
  19. data/vendor/{libdatadog-40.0.0 → libdatadog-45.0.0}/aarch64-linux-musl/lib/libdatadog_profiling.so +0 -0
  20. data/vendor/{libdatadog-40.0.0 → libdatadog-45.0.0}/aarch64-linux-musl/lib/pkgconfig/datadog_profiling_with_rpath.pc +1 -1
  21. data/vendor/{libdatadog-40.0.0/aarch64-linux → libdatadog-45.0.0/arm64-darwin}/LICENSE-3rdparty.csv +15 -12
  22. data/vendor/{libdatadog-40.0.0/aarch64-linux-musl → libdatadog-45.0.0/arm64-darwin}/include/datadog/common.h +176 -122
  23. data/vendor/{libdatadog-40.0.0/aarch64-linux-musl → libdatadog-45.0.0/arm64-darwin}/include/datadog/data-pipeline.h +79 -9
  24. data/vendor/{libdatadog-40.0.0 → libdatadog-45.0.0}/arm64-darwin/include/datadog/ffe.h +12 -0
  25. data/vendor/{libdatadog-40.0.0/aarch64-linux → libdatadog-45.0.0/arm64-darwin}/include/datadog/library-config.h +47 -24
  26. data/vendor/{libdatadog-40.0.0/aarch64-linux → libdatadog-45.0.0/arm64-darwin}/include/datadog/otel-thread-ctx.h +35 -5
  27. data/vendor/{libdatadog-40.0.0 → libdatadog-45.0.0}/arm64-darwin/lib/libdatadog_profiling.dylib +0 -0
  28. data/vendor/{libdatadog-40.0.0/x86_64-linux-musl → libdatadog-45.0.0/arm64-darwin}/lib/pkgconfig/datadog_profiling_with_rpath.pc +1 -1
  29. data/vendor/libdatadog-45.0.0/x86_64-linux/LICENSE-3rdparty.csv +557 -0
  30. data/vendor/{libdatadog-40.0.0 → libdatadog-45.0.0}/x86_64-linux/bin/libdatadog-crashtracking-receiver +0 -0
  31. data/vendor/libdatadog-45.0.0/x86_64-linux/include/datadog/common.h +3169 -0
  32. data/vendor/libdatadog-45.0.0/x86_64-linux/include/datadog/data-pipeline.h +682 -0
  33. data/vendor/libdatadog-45.0.0/x86_64-linux/include/datadog/ffe.h +191 -0
  34. data/vendor/libdatadog-45.0.0/x86_64-linux/include/datadog/library-config.h +138 -0
  35. data/vendor/libdatadog-45.0.0/x86_64-linux/include/datadog/otel-thread-ctx.h +116 -0
  36. data/vendor/{libdatadog-40.0.0 → libdatadog-45.0.0}/x86_64-linux/lib/libdatadog_profiling.so +0 -0
  37. data/vendor/libdatadog-45.0.0/x86_64-linux/lib/pkgconfig/datadog_profiling_with_rpath.pc +15 -0
  38. data/vendor/{libdatadog-40.0.0 → libdatadog-45.0.0}/x86_64-linux-musl/LICENSE-3rdparty.csv +15 -12
  39. data/vendor/{libdatadog-40.0.0 → libdatadog-45.0.0}/x86_64-linux-musl/bin/libdatadog-crashtracking-receiver +0 -0
  40. data/vendor/{libdatadog-40.0.0/aarch64-linux → libdatadog-45.0.0/x86_64-linux-musl}/include/datadog/common.h +176 -122
  41. data/vendor/{libdatadog-40.0.0 → libdatadog-45.0.0}/x86_64-linux-musl/include/datadog/data-pipeline.h +79 -9
  42. data/vendor/{libdatadog-40.0.0 → libdatadog-45.0.0}/x86_64-linux-musl/include/datadog/ffe.h +12 -0
  43. data/vendor/{libdatadog-40.0.0 → libdatadog-45.0.0}/x86_64-linux-musl/include/datadog/library-config.h +47 -24
  44. data/vendor/{libdatadog-40.0.0/aarch64-linux-musl → libdatadog-45.0.0/x86_64-linux-musl}/include/datadog/otel-thread-ctx.h +35 -5
  45. data/vendor/{libdatadog-40.0.0 → libdatadog-45.0.0}/x86_64-linux-musl/lib/libdatadog_profiling.so +0 -0
  46. data/vendor/{libdatadog-40.0.0/aarch64-linux → libdatadog-45.0.0/x86_64-linux-musl}/lib/pkgconfig/datadog_profiling_with_rpath.pc +1 -1
  47. metadata +91 -91
  48. data/vendor/libdatadog-40.0.0/x86_64-linux/LICENSE-3rdparty.csv +0 -554
  49. data/vendor/libdatadog-40.0.0/x86_64-linux/include/datadog/common.h +0 -3115
  50. data/vendor/libdatadog-40.0.0/x86_64-linux/include/datadog/data-pipeline.h +0 -612
  51. data/vendor/libdatadog-40.0.0/x86_64-linux/include/datadog/ffe.h +0 -179
  52. data/vendor/libdatadog-40.0.0/x86_64-linux/include/datadog/library-config.h +0 -115
  53. data/vendor/libdatadog-40.0.0/x86_64-linux/include/datadog/otel-thread-ctx.h +0 -86
  54. data/vendor/libdatadog-40.0.0/x86_64-linux/lib/pkgconfig/datadog_profiling_with_rpath.pc +0 -15
  55. /data/vendor/{libdatadog-40.0.0 → libdatadog-45.0.0}/aarch64-linux/LICENSE +0 -0
  56. /data/vendor/{libdatadog-40.0.0 → libdatadog-45.0.0}/aarch64-linux/NOTICE +0 -0
  57. /data/vendor/{libdatadog-40.0.0 → libdatadog-45.0.0}/aarch64-linux/include/datadog/blazesym.h +0 -0
  58. /data/vendor/{libdatadog-40.0.0 → libdatadog-45.0.0}/aarch64-linux/include/datadog/crashtracker.h +0 -0
  59. /data/vendor/{libdatadog-40.0.0 → libdatadog-45.0.0}/aarch64-linux/include/datadog/ddsketch.h +0 -0
  60. /data/vendor/{libdatadog-40.0.0 → libdatadog-45.0.0}/aarch64-linux/include/datadog/log.h +0 -0
  61. /data/vendor/{libdatadog-40.0.0 → libdatadog-45.0.0}/aarch64-linux/include/datadog/profiling.h +0 -0
  62. /data/vendor/{libdatadog-40.0.0 → libdatadog-45.0.0}/aarch64-linux/include/datadog/shared-runtime.h +0 -0
  63. /data/vendor/{libdatadog-40.0.0 → libdatadog-45.0.0}/aarch64-linux/include/datadog/telemetry.h +0 -0
  64. /data/vendor/{libdatadog-40.0.0 → libdatadog-45.0.0}/aarch64-linux-musl/LICENSE +0 -0
  65. /data/vendor/{libdatadog-40.0.0 → libdatadog-45.0.0}/aarch64-linux-musl/NOTICE +0 -0
  66. /data/vendor/{libdatadog-40.0.0 → libdatadog-45.0.0}/aarch64-linux-musl/include/datadog/blazesym.h +0 -0
  67. /data/vendor/{libdatadog-40.0.0 → libdatadog-45.0.0}/aarch64-linux-musl/include/datadog/crashtracker.h +0 -0
  68. /data/vendor/{libdatadog-40.0.0 → libdatadog-45.0.0}/aarch64-linux-musl/include/datadog/ddsketch.h +0 -0
  69. /data/vendor/{libdatadog-40.0.0 → libdatadog-45.0.0}/aarch64-linux-musl/include/datadog/log.h +0 -0
  70. /data/vendor/{libdatadog-40.0.0 → libdatadog-45.0.0}/aarch64-linux-musl/include/datadog/profiling.h +0 -0
  71. /data/vendor/{libdatadog-40.0.0 → libdatadog-45.0.0}/aarch64-linux-musl/include/datadog/shared-runtime.h +0 -0
  72. /data/vendor/{libdatadog-40.0.0 → libdatadog-45.0.0}/aarch64-linux-musl/include/datadog/telemetry.h +0 -0
  73. /data/vendor/{libdatadog-40.0.0 → libdatadog-45.0.0}/arm64-darwin/LICENSE +0 -0
  74. /data/vendor/{libdatadog-40.0.0 → libdatadog-45.0.0}/arm64-darwin/NOTICE +0 -0
  75. /data/vendor/{libdatadog-40.0.0 → libdatadog-45.0.0}/arm64-darwin/bin/libdatadog-crashtracking-receiver +0 -0
  76. /data/vendor/{libdatadog-40.0.0 → libdatadog-45.0.0}/arm64-darwin/include/datadog/blazesym.h +0 -0
  77. /data/vendor/{libdatadog-40.0.0 → libdatadog-45.0.0}/arm64-darwin/include/datadog/crashtracker.h +0 -0
  78. /data/vendor/{libdatadog-40.0.0 → libdatadog-45.0.0}/arm64-darwin/include/datadog/ddsketch.h +0 -0
  79. /data/vendor/{libdatadog-40.0.0 → libdatadog-45.0.0}/arm64-darwin/include/datadog/log.h +0 -0
  80. /data/vendor/{libdatadog-40.0.0 → libdatadog-45.0.0}/arm64-darwin/include/datadog/profiling.h +0 -0
  81. /data/vendor/{libdatadog-40.0.0 → libdatadog-45.0.0}/arm64-darwin/include/datadog/shared-runtime.h +0 -0
  82. /data/vendor/{libdatadog-40.0.0 → libdatadog-45.0.0}/arm64-darwin/include/datadog/telemetry.h +0 -0
  83. /data/vendor/{libdatadog-40.0.0 → libdatadog-45.0.0}/x86_64-linux/LICENSE +0 -0
  84. /data/vendor/{libdatadog-40.0.0 → libdatadog-45.0.0}/x86_64-linux/NOTICE +0 -0
  85. /data/vendor/{libdatadog-40.0.0 → libdatadog-45.0.0}/x86_64-linux/include/datadog/blazesym.h +0 -0
  86. /data/vendor/{libdatadog-40.0.0 → libdatadog-45.0.0}/x86_64-linux/include/datadog/crashtracker.h +0 -0
  87. /data/vendor/{libdatadog-40.0.0 → libdatadog-45.0.0}/x86_64-linux/include/datadog/ddsketch.h +0 -0
  88. /data/vendor/{libdatadog-40.0.0 → libdatadog-45.0.0}/x86_64-linux/include/datadog/log.h +0 -0
  89. /data/vendor/{libdatadog-40.0.0 → libdatadog-45.0.0}/x86_64-linux/include/datadog/profiling.h +0 -0
  90. /data/vendor/{libdatadog-40.0.0 → libdatadog-45.0.0}/x86_64-linux/include/datadog/shared-runtime.h +0 -0
  91. /data/vendor/{libdatadog-40.0.0 → libdatadog-45.0.0}/x86_64-linux/include/datadog/telemetry.h +0 -0
  92. /data/vendor/{libdatadog-40.0.0 → libdatadog-45.0.0}/x86_64-linux-musl/LICENSE +0 -0
  93. /data/vendor/{libdatadog-40.0.0 → libdatadog-45.0.0}/x86_64-linux-musl/NOTICE +0 -0
  94. /data/vendor/{libdatadog-40.0.0 → libdatadog-45.0.0}/x86_64-linux-musl/include/datadog/blazesym.h +0 -0
  95. /data/vendor/{libdatadog-40.0.0 → libdatadog-45.0.0}/x86_64-linux-musl/include/datadog/crashtracker.h +0 -0
  96. /data/vendor/{libdatadog-40.0.0 → libdatadog-45.0.0}/x86_64-linux-musl/include/datadog/ddsketch.h +0 -0
  97. /data/vendor/{libdatadog-40.0.0 → libdatadog-45.0.0}/x86_64-linux-musl/include/datadog/log.h +0 -0
  98. /data/vendor/{libdatadog-40.0.0 → libdatadog-45.0.0}/x86_64-linux-musl/include/datadog/profiling.h +0 -0
  99. /data/vendor/{libdatadog-40.0.0 → libdatadog-45.0.0}/x86_64-linux-musl/include/datadog/shared-runtime.h +0 -0
  100. /data/vendor/{libdatadog-40.0.0 → libdatadog-45.0.0}/x86_64-linux-musl/include/datadog/telemetry.h +0 -0
@@ -52,8 +52,22 @@
52
52
 
53
53
  typedef struct ddog_Endpoint ddog_Endpoint;
54
54
 
55
+ /**
56
+ * A shared handle to a [`MutableMetadata`].
57
+ *
58
+ * This is a cheap-to-clone `Arc<ArcSwap<MutableMetadata>>`: all clones observe the same
59
+ * underlying value. See the
60
+ * [module documentation](self) for the write/read protocol.
61
+ */
62
+ typedef struct ddog_MutableMetadataHandle ddog_MutableMetadataHandle;
63
+
55
64
  typedef struct ddog_Tag ddog_Tag;
56
65
 
66
+ typedef struct ddog_ArrayQueue {
67
+ struct ddog_ArrayQueue *inner;
68
+ void (*item_delete_fn)(void*);
69
+ } ddog_ArrayQueue;
70
+
57
71
  /**
58
72
  * Holds the raw parts of a Rust Vec; it should only be created from Rust,
59
73
  * never from C.
@@ -77,46 +91,6 @@ typedef struct ddog_Error {
77
91
  struct ddog_Vec_U8 message;
78
92
  } ddog_Error;
79
93
 
80
- typedef struct ddog_Slice_CChar {
81
- /**
82
- * Should be non-null and suitably aligned for the underlying type. It is
83
- * allowed but not recommended for the pointer to be null when the len is
84
- * zero.
85
- */
86
- const char *ptr;
87
- /**
88
- * The number of elements (not bytes) that `.ptr` points to. Must be less
89
- * than or equal to [isize::MAX].
90
- */
91
- uintptr_t len;
92
- } ddog_Slice_CChar;
93
-
94
- /**
95
- * Use to represent strings -- should be valid UTF-8.
96
- */
97
- typedef struct ddog_Slice_CChar ddog_CharSlice;
98
-
99
- typedef enum ddog_Option_Error_Tag {
100
- DDOG_OPTION_ERROR_SOME_ERROR,
101
- DDOG_OPTION_ERROR_NONE_ERROR,
102
- } ddog_Option_Error_Tag;
103
-
104
- typedef struct ddog_Option_Error {
105
- ddog_Option_Error_Tag tag;
106
- union {
107
- struct {
108
- struct ddog_Error some;
109
- };
110
- };
111
- } ddog_Option_Error;
112
-
113
- typedef struct ddog_Option_Error ddog_MaybeError;
114
-
115
- typedef struct ddog_ArrayQueue {
116
- struct ddog_ArrayQueue *inner;
117
- void (*item_delete_fn)(void*);
118
- } ddog_ArrayQueue;
119
-
120
94
  typedef enum ddog_ArrayQueue_NewResult_Tag {
121
95
  DDOG_ARRAY_QUEUE_NEW_RESULT_OK,
122
96
  DDOG_ARRAY_QUEUE_NEW_RESULT_ERR,
@@ -210,6 +184,59 @@ typedef struct ddog_ArrayQueue_UsizeResult {
210
184
  };
211
185
  } ddog_ArrayQueue_UsizeResult;
212
186
 
187
+ typedef struct ddog_Slice_CChar {
188
+ /**
189
+ * Should be non-null and suitably aligned for the underlying type. It is
190
+ * allowed but not recommended for the pointer to be null when the len is
191
+ * zero.
192
+ */
193
+ const char *ptr;
194
+ /**
195
+ * The number of elements (not bytes) that `.ptr` points to. Must be less
196
+ * than or equal to [isize::MAX].
197
+ */
198
+ uintptr_t len;
199
+ } ddog_Slice_CChar;
200
+
201
+ /**
202
+ * Use to represent strings -- should be valid UTF-8.
203
+ */
204
+ typedef struct ddog_Slice_CChar ddog_CharSlice;
205
+
206
+ typedef enum ddog_Option_Error_Tag {
207
+ DDOG_OPTION_ERROR_SOME_ERROR,
208
+ DDOG_OPTION_ERROR_NONE_ERROR,
209
+ } ddog_Option_Error_Tag;
210
+
211
+ typedef struct ddog_Option_Error {
212
+ ddog_Option_Error_Tag tag;
213
+ union {
214
+ struct {
215
+ struct ddog_Error some;
216
+ };
217
+ };
218
+ } ddog_Option_Error;
219
+
220
+ typedef struct ddog_Option_Error ddog_MaybeError;
221
+
222
+ /**
223
+ * A generic result type for when an operation may fail,
224
+ * but there's nothing to return in the case of success.
225
+ */
226
+ typedef enum ddog_VoidResult_Tag {
227
+ DDOG_VOID_RESULT_OK,
228
+ DDOG_VOID_RESULT_ERR,
229
+ } ddog_VoidResult_Tag;
230
+
231
+ typedef struct ddog_VoidResult {
232
+ ddog_VoidResult_Tag tag;
233
+ union {
234
+ struct {
235
+ struct ddog_Error err;
236
+ };
237
+ };
238
+ } ddog_VoidResult;
239
+
213
240
  typedef enum ddog_Option_U32_Tag {
214
241
  DDOG_OPTION_U32_SOME_U32,
215
242
  DDOG_OPTION_U32_NONE_U32,
@@ -384,6 +411,14 @@ typedef enum ddog_prof_SampleType {
384
411
  * serialization.
385
412
  */
386
413
  DDOG_PROF_SAMPLE_TYPE_CUSTOM5,
414
+ /**
415
+ * Time spent in garbage collection.
416
+ */
417
+ DDOG_PROF_SAMPLE_TYPE_GC_TIME,
418
+ /**
419
+ * Number of garbage-collection samples / pause events.
420
+ */
421
+ DDOG_PROF_SAMPLE_TYPE_GC_SAMPLES,
387
422
  } ddog_prof_SampleType;
388
423
 
389
424
  typedef enum ddog_prof_Utf8Option {
@@ -517,24 +552,6 @@ typedef struct ddog_prof_ProfileExporter_Result {
517
552
  };
518
553
  } ddog_prof_ProfileExporter_Result;
519
554
 
520
- /**
521
- * A generic result type for when an operation may fail,
522
- * but there's nothing to return in the case of success.
523
- */
524
- typedef enum ddog_VoidResult_Tag {
525
- DDOG_VOID_RESULT_OK,
526
- DDOG_VOID_RESULT_ERR,
527
- } ddog_VoidResult_Tag;
528
-
529
- typedef struct ddog_VoidResult {
530
- ddog_VoidResult_Tag tag;
531
- union {
532
- struct {
533
- struct ddog_Error err;
534
- };
535
- };
536
- } ddog_VoidResult;
537
-
538
555
  typedef struct ddog_HttpStatus {
539
556
  uint16_t code;
540
557
  } ddog_HttpStatus;
@@ -1759,14 +1776,6 @@ typedef struct ddog_TelemetryClientConfig {
1759
1776
  * How often telemetry should be sent, in milliseconds.
1760
1777
  */
1761
1778
  uint64_t interval;
1762
- /**
1763
- * A V4 UUID that represents a tracer session. This ID should:
1764
- * - Be generated when the tracer starts
1765
- * - Be identical within the context of a host (i.e. multiple threads/processes that belong to
1766
- * a single instrumented app should share the same runtime_id)
1767
- * - Be associated with traces to allow correlation between traces and telemetry data
1768
- */
1769
- ddog_CharSlice runtime_id;
1770
1779
  /**
1771
1780
  * Whether to enable debug mode for telemetry.
1772
1781
  * When enabled, sets the DD-Telemetry-Debug-Enabled header to true.
@@ -1971,6 +1980,37 @@ typedef struct ddog_ProcessInfo {
1971
1980
  ddog_CharSlice language;
1972
1981
  } ddog_ProcessInfo;
1973
1982
 
1983
+ /**
1984
+ * C-compatible representation of an anonymous file handle
1985
+ */
1986
+ typedef struct ddog_TracerMemfdHandle {
1987
+ /**
1988
+ * File descriptor (relevant only on Linux)
1989
+ */
1990
+ int fd;
1991
+ } ddog_TracerMemfdHandle;
1992
+
1993
+ /**
1994
+ * A generic result type for when an operation may fail,
1995
+ * or may return <T> in case of success.
1996
+ */
1997
+ typedef enum ddog_Result_TracerMemfdHandle_Tag {
1998
+ DDOG_RESULT_TRACER_MEMFD_HANDLE_OK_TRACER_MEMFD_HANDLE,
1999
+ DDOG_RESULT_TRACER_MEMFD_HANDLE_ERR_TRACER_MEMFD_HANDLE,
2000
+ } ddog_Result_TracerMemfdHandle_Tag;
2001
+
2002
+ typedef struct ddog_Result_TracerMemfdHandle {
2003
+ ddog_Result_TracerMemfdHandle_Tag tag;
2004
+ union {
2005
+ struct {
2006
+ struct ddog_TracerMemfdHandle ok;
2007
+ };
2008
+ struct {
2009
+ struct ddog_Error err;
2010
+ };
2011
+ };
2012
+ } ddog_Result_TracerMemfdHandle;
2013
+
1974
2014
  /**
1975
2015
  * Ffi safe type representing an owned null-terminated C array
1976
2016
  * Equivalent to a std::ffi::CString
@@ -2028,37 +2068,6 @@ typedef struct ddog_LibraryConfigLoggedResult {
2028
2068
  };
2029
2069
  } ddog_LibraryConfigLoggedResult;
2030
2070
 
2031
- /**
2032
- * C-compatible representation of an anonymous file handle
2033
- */
2034
- typedef struct ddog_TracerMemfdHandle {
2035
- /**
2036
- * File descriptor (relevant only on Linux)
2037
- */
2038
- int fd;
2039
- } ddog_TracerMemfdHandle;
2040
-
2041
- /**
2042
- * A generic result type for when an operation may fail,
2043
- * or may return <T> in case of success.
2044
- */
2045
- typedef enum ddog_Result_TracerMemfdHandle_Tag {
2046
- DDOG_RESULT_TRACER_MEMFD_HANDLE_OK_TRACER_MEMFD_HANDLE,
2047
- DDOG_RESULT_TRACER_MEMFD_HANDLE_ERR_TRACER_MEMFD_HANDLE,
2048
- } ddog_Result_TracerMemfdHandle_Tag;
2049
-
2050
- typedef struct ddog_Result_TracerMemfdHandle {
2051
- ddog_Result_TracerMemfdHandle_Tag tag;
2052
- union {
2053
- struct {
2054
- struct ddog_TracerMemfdHandle ok;
2055
- };
2056
- struct {
2057
- struct ddog_Error err;
2058
- };
2059
- };
2060
- } ddog_Result_TracerMemfdHandle;
2061
-
2062
2071
  /**
2063
2072
  * Log level for filtering log events.
2064
2073
  */
@@ -2438,10 +2447,9 @@ typedef struct ddog_SharedRuntimeFFIError {
2438
2447
  #define ddog_MAX_ATTRS_DATA_SIZE 612
2439
2448
 
2440
2449
  /**
2441
- * Opaque handle to a thread context record. Used to allow the FFI to convert [ThreadContext]
2442
- * to and from raw pointers without exposing [ThreadContextRecord], as the latter needs extra
2443
- * care to be manipulated (async-signal-safety, seq-lock-like modification protocol through
2444
- * [ThreadContextRecord::valid], etc.)
2450
+ * Opaque handle to a thread context record. Used to pass an owned thread context to and from C
2451
+ * without exposing `ThreadContext`, as the underlying record needs extra care to be
2452
+ * manipulated (async-signal-safety, seq-lock-like modification protocol, etc.)
2445
2453
  */
2446
2454
  typedef struct ddog_ThreadContextHandle {
2447
2455
 
@@ -2942,27 +2950,6 @@ typedef void (*ddog_crasht_RuntimeStacktraceStringCallback)(void (*emit_stacktra
2942
2950
  extern "C" {
2943
2951
  #endif // __cplusplus
2944
2952
 
2945
- /**
2946
- * Drops the error. It should not be used after this, though the
2947
- * implementation tries to limit the damage in the case of use-after-free and
2948
- * double-free scenarios.
2949
- *
2950
- * # Safety
2951
- *
2952
- * Only pass null or a pointer to a valid, mutable `ddog_Error`.
2953
- */
2954
- void ddog_Error_drop(struct ddog_Error *error);
2955
-
2956
- /**
2957
- * Returns a CharSlice of the error's message that is valid until the error
2958
- * is dropped.
2959
- * # Safety
2960
- * Only pass null or a valid reference to a `ddog_Error`.
2961
- */
2962
- ddog_CharSlice ddog_Error_message(const struct ddog_Error *error);
2963
-
2964
- void ddog_MaybeError_drop(ddog_MaybeError);
2965
-
2966
2953
  /**
2967
2954
  * Creates a new ArrayQueue with the given capacity and item_delete_fn.
2968
2955
  * The item_delete_fn is called when an item is dropped from the queue.
@@ -3057,6 +3044,73 @@ void ddog_endpoint_set_use_system_resolver(struct ddog_Endpoint *endpoint,
3057
3044
 
3058
3045
  void ddog_endpoint_drop(struct ddog_Endpoint*);
3059
3046
 
3047
+ /**
3048
+ * Drops the error. It should not be used after this, though the
3049
+ * implementation tries to limit the damage in the case of use-after-free and
3050
+ * double-free scenarios.
3051
+ *
3052
+ * # Safety
3053
+ *
3054
+ * Only pass null or a pointer to a valid, mutable `ddog_Error`.
3055
+ */
3056
+ void ddog_Error_drop(struct ddog_Error *error);
3057
+
3058
+ /**
3059
+ * Returns a CharSlice of the error's message that is valid until the error
3060
+ * is dropped.
3061
+ * # Safety
3062
+ * Only pass null or a valid reference to a `ddog_Error`.
3063
+ */
3064
+ ddog_CharSlice ddog_Error_message(const struct ddog_Error *error);
3065
+
3066
+ void ddog_MaybeError_drop(ddog_MaybeError);
3067
+
3068
+ /**
3069
+ * Creates a shared, updatable metadata handle initialized with default values.
3070
+ *
3071
+ * Use the metadata setters to configure or update its values.
3072
+ *
3073
+ * # Safety
3074
+ *
3075
+ * `out_handle` must point to valid, writable (uninitialized) memory for a
3076
+ * `ddog_MutableMetadataHandle *`.
3077
+ */
3078
+ void ddog_mutable_metadata_new(struct ddog_MutableMetadataHandle **out_handle);
3079
+
3080
+ /**
3081
+ * Frees a `ddog_MutableMetadataHandle` handle.
3082
+ *
3083
+ * Call once this handle is no longer needed. It must not be used concurrently
3084
+ * with this call or accessed afterward. Other cloned handles remain valid.
3085
+ *
3086
+ * # Safety
3087
+ *
3088
+ * `handle` must be a valid mutable metadata handle obtained through [`ddog_mutable_metadata_new`]
3089
+ */
3090
+ void ddog_mutable_metadata_free(struct ddog_MutableMetadataHandle *handle);
3091
+
3092
+ /**
3093
+ * Replaces the `runtime_id` held by the shared mutable metadata handle.
3094
+ *
3095
+ * # Safety
3096
+ *
3097
+ * `handle` must be a valid mutable metadata handle obtained through [`ddog_mutable_metadata_new`]
3098
+ */
3099
+ DDOG_CHECK_RETURN
3100
+ struct ddog_VoidResult ddog_mutable_metadata_set_runtime_id(const struct ddog_MutableMetadataHandle *handle,
3101
+ ddog_CharSlice runtime_id);
3102
+
3103
+ /**
3104
+ * Replaces the `process_tags` held by the shared mutable metadata handle.
3105
+ *
3106
+ * # Safety
3107
+ *
3108
+ * `handle` must be a valid mutable metadata handle obtained through [`ddog_mutable_metadata_new`]
3109
+ */
3110
+ DDOG_CHECK_RETURN
3111
+ struct ddog_VoidResult ddog_mutable_metadata_set_process_tags(const struct ddog_MutableMetadataHandle *handle,
3112
+ ddog_CharSlice process_tags);
3113
+
3060
3114
  struct ddog_Option_U32 ddog_Option_U32_some(uint32_t v);
3061
3115
 
3062
3116
  struct ddog_Option_U32 ddog_Option_U32_none(void);
@@ -137,6 +137,13 @@ struct ddog_TraceExporterError *ddog_trace_exporter_config_enable_telemetry(stru
137
137
  struct ddog_TraceExporterError *ddog_trace_exporter_config_set_compute_stats(struct ddog_TraceExporterConfig *config,
138
138
  bool is_enabled);
139
139
 
140
+ /**
141
+ * Indicates that the tracer has already marked top-level spans with `_dd.top_level`.
142
+ * Sets the `Datadog-Client-Computed-Top-Level` header without enabling stats computation.
143
+ */
144
+ struct ddog_TraceExporterError *ddog_trace_exporter_config_set_client_computed_top_level(struct ddog_TraceExporterConfig *config,
145
+ bool client_computed_top_level);
146
+
140
147
  /**
141
148
  * Sets `Datadog-Client-Computed-Stats` header to `true`.
142
149
  * This indicates that the upstream system has already computed the stats,
@@ -154,12 +161,31 @@ struct ddog_TraceExporterError *ddog_trace_exporter_config_set_compute_stats(str
154
161
  struct ddog_TraceExporterError *ddog_trace_exporter_config_set_client_computed_stats(struct ddog_TraceExporterConfig *config,
155
162
  bool client_computed_stats);
156
163
 
164
+ /**
165
+ * Shares a mutable metadata handle with the exporter config.
166
+ *
167
+ * When set, this supersedes `ddog_trace_exporter_config_set_process_tags` and
168
+ * `ddog_trace_exporter_config_set_runtime_id`.
169
+ */
170
+ struct ddog_TraceExporterError *ddog_trace_exporter_config_set_mutable_metadata(struct ddog_TraceExporterConfig *config,
171
+ const ddog_MutableMetadataHandle *metadata);
172
+
157
173
  /**
158
174
  * Sets the process tags to be included in the stats payload.
175
+ *
176
+ * This should not be used when `ddog_trace_exporter_config_set_mutable_metadata` is used.
159
177
  */
160
178
  struct ddog_TraceExporterError *ddog_trace_exporter_config_set_process_tags(struct ddog_TraceExporterConfig *config,
161
179
  ddog_CharSlice process_tags);
162
180
 
181
+ /**
182
+ * Sets the runtime id used in payloads.
183
+ *
184
+ * This should not be used when `ddog_trace_exporter_config_set_mutable_metadata` is used.
185
+ */
186
+ struct ddog_TraceExporterError *ddog_trace_exporter_config_set_runtime_id(struct ddog_TraceExporterConfig *config,
187
+ ddog_CharSlice runtime_id);
188
+
163
189
  /**
164
190
  * Sets the `X-Datadog-Test-Session-Token` header. Only used for testing with the test agent.
165
191
  */
@@ -187,19 +213,21 @@ struct ddog_TraceExporterError *ddog_trace_exporter_config_set_shared_runtime(st
187
213
  struct ddog_ForkSafeRuntime *handle);
188
214
 
189
215
  /**
190
- * Enables OTLP HTTP/JSON export and sets the endpoint URL.
216
+ * Enables OTLP trace export and sets the endpoint URL.
191
217
  *
192
- * When set, traces are sent to this URL in OTLP HTTP/JSON format instead of the Datadog
193
- * agent. The host language is responsible for resolving the endpoint from its configuration
194
- * (e.g. `OTEL_EXPORTER_OTLP_TRACES_ENDPOINT`) before calling this function.
218
+ * When set, traces are sent to this URL using the protocol selected by
219
+ * `ddog_trace_exporter_config_set_otlp_protocol` instead of the Datadog agent. The host language
220
+ * is responsible for resolving the endpoint from its configuration (e.g.
221
+ * `OTEL_EXPORTER_OTLP_TRACES_ENDPOINT`) before calling this function.
195
222
  */
196
223
  struct ddog_TraceExporterError *ddog_trace_exporter_config_set_otlp_endpoint(struct ddog_TraceExporterConfig *config,
197
224
  ddog_CharSlice url);
198
225
 
199
226
  /**
200
- * Sets the OTLP export protocol. Accepts the OTel-standard values `http/json` (default) or
201
- * `http/protobuf`; `grpc` is rejected as not yet supported. The host language resolves the value
227
+ * Sets the OTLP export protocol. Accepts the OTel-standard values `http/json` (default),
228
+ * `http/protobuf`, or `grpc`; unknown values are rejected. The host language resolves the value
202
229
  * (e.g. from `OTEL_EXPORTER_OTLP_TRACES_PROTOCOL`).
230
+ * The `grpc` protocol currently supports plaintext `http://` endpoints only.
203
231
  *
204
232
  * Has no effect unless an OTLP endpoint is also configured via
205
233
  * `ddog_trace_exporter_config_set_otlp_endpoint`; without one, traces are sent to the
@@ -240,6 +268,48 @@ struct ddog_TraceExporterError *ddog_trace_exporter_config_set_stats_cardinality
240
268
  */
241
269
  struct ddog_CardinalityLimitConfig ddog_trace_exporter_config_default_stats_cardinality_limit(void);
242
270
 
271
+ /**
272
+ * Enables agentless APM trace export and sets the intake URL and API key.
273
+ *
274
+ * When set, APM trace spans are sent directly to the Datadog HTTP intake in JSON format
275
+ * (`POST /v1/input`) instead of through the Datadog Agent. Agentless trace export is mutually
276
+ * exclusive with both an agent URL ([`ddog_trace_exporter_config_set_url`]) and an OTLP endpoint
277
+ * ([`ddog_trace_exporter_config_set_otlp_endpoint`]); combining either with this setter causes
278
+ * [`ddog_trace_exporter_new`] to return an error.
279
+ */
280
+ struct ddog_TraceExporterError *ddog_trace_exporter_config_set_agentless_endpoint(struct ddog_TraceExporterConfig *config,
281
+ ddog_CharSlice url,
282
+ ddog_CharSlice api_key);
283
+
284
+ /**
285
+ * Sets the request timeout (in milliseconds) used by the agentless intake transport.
286
+ *
287
+ * Defaults to 15 seconds when unset. Calling this without also setting an agentless endpoint
288
+ * causes [`ddog_trace_exporter_new`] to return an error.
289
+ */
290
+ struct ddog_TraceExporterError *ddog_trace_exporter_config_set_agentless_timeout(struct ddog_TraceExporterConfig *config,
291
+ uint64_t timeout_ms);
292
+
293
+ /**
294
+ * Sets the span obfuscation configuration from a JSON string.
295
+ *
296
+ * `json` is deserialized into `ObfuscationConfig` (the same struct the Datadog Agent uses),
297
+ * which controls obfuscation of HTTP URLs, SQL resources, Redis/Valkey commands, memcached
298
+ * commands, credit-card numbers, elasticsearch/opensearch/mongodb bodies, and tag-replace
299
+ * rules. Obfuscation is applied to every span on the agentless export path (see
300
+ * [`ddog_trace_exporter_config_set_agentless_endpoint`]); it has no effect on the agent path.
301
+ *
302
+ * Returns an error if `json` is not valid UTF-8 or fails to deserialize. Example:
303
+ * ```c
304
+ * ddog_trace_exporter_config_set_obfuscation_config(
305
+ * cfg, DDOG_CHARSLICE_C(
306
+ * "{\"http\":{\"remove_query_string\":true},"
307
+ * "\"credit_cards\":{\"enabled\":true}}"));
308
+ * ```
309
+ */
310
+ struct ddog_TraceExporterError *ddog_trace_exporter_config_set_obfuscation_config(struct ddog_TraceExporterConfig *config,
311
+ ddog_CharSlice json);
312
+
243
313
  /**
244
314
  * Configure the exporter to write traces as newline-delimited JSON to stdout (the Datadog
245
315
  * Forwarder "log exporter" path) instead of sending them to a Datadog agent. Used in serverless
@@ -262,9 +332,9 @@ struct ddog_TraceExporterError *ddog_trace_exporter_config_set_output_to_log(str
262
332
  /**
263
333
  * Create a new TraceExporter instance.
264
334
  *
265
- * When an OTLP endpoint is configured via `TraceExporterConfig`, the exporter sends traces to
266
- * that endpoint in OTLP over HTTP — JSON or protobuf per the configured protocol — instead of
267
- * to the Datadog agent. The same payload (e.g. MessagePack) is passed to
335
+ * When an OTLP endpoint is configured via `TraceExporterConfig`, the exporter sends traces using
336
+ * the configured `http/json`, `http/protobuf`, or `grpc` protocol instead of the Datadog agent.
337
+ * The same payload (e.g. MessagePack) is passed to
268
338
  * `ddog_trace_exporter_send`; the library decodes and converts it to OTLP when OTLP is enabled.
269
339
  *
270
340
  * # Arguments
@@ -147,6 +147,18 @@ struct ddog_ffe_Result_HandleConfiguration ddog_ffe_configuration_new(struct ddo
147
147
  */
148
148
  void ddog_ffe_configuration_drop(ddog_ffe_Handle_Configuration *config);
149
149
 
150
+ /**
151
+ * Get the config-level `observeFullEvaluationData` flag.
152
+ *
153
+ * Opt-in boolean for emitting full flag evaluation data from SDKs to Datadog. Flag evaluation data
154
+ * may contain PII; defaults to `false` for privacy.
155
+ *
156
+ * # Safety
157
+ *
158
+ * `config` must be a valid `Configuration` handle created by `ddog_ffe_configuration_new`.
159
+ */
160
+ bool ddog_ffe_configuration_get_observe_full_evaluation_data(ddog_ffe_Handle_Configuration config);
161
+
150
162
  /**
151
163
  * Creates a new EvaluationContext with the given targeting key and attributes.
152
164
  *
@@ -24,32 +24,8 @@ void ddog_library_configurator_with_fleet_path(struct ddog_Configurator *c,
24
24
  void ddog_library_configurator_with_process_info(struct ddog_Configurator *c,
25
25
  struct ddog_ProcessInfo p);
26
26
 
27
- void ddog_library_configurator_with_detect_process_info(struct ddog_Configurator *c);
28
-
29
27
  void ddog_library_configurator_drop(struct ddog_Configurator*);
30
28
 
31
- struct ddog_LibraryConfigLoggedResult ddog_library_configurator_get(const struct ddog_Configurator *configurator);
32
-
33
- /**
34
- * Returns a static null-terminated string, containing the name of the environment variable
35
- * associated with the library configuration
36
- */
37
- struct ddog_CStr ddog_library_config_source_to_string(enum ddog_LibraryConfigSource name);
38
-
39
- /**
40
- * Returns a static null-terminated string with the path to the managed stable config yaml config
41
- * file
42
- */
43
- struct ddog_CStr ddog_library_config_fleet_stable_config_path(void);
44
-
45
- /**
46
- * Returns a static null-terminated string with the path to the local stable config yaml config
47
- * file
48
- */
49
- struct ddog_CStr ddog_library_config_local_stable_config_path(void);
50
-
51
- void ddog_library_config_drop(struct ddog_LibraryConfigLoggedResult config_result);
52
-
53
29
  /**
54
30
  * Allocates and returns a pointer to a new `TracerMetadata` object on the heap.
55
31
  *
@@ -89,6 +65,29 @@ void ddog_tracer_metadata_set(struct ddog_TracerMetadata *ptr,
89
65
  enum ddog_MetadataKind kind,
90
66
  const char *value);
91
67
 
68
+ /**
69
+ * Includes thread-context discovery metadata in the `TracerMetadata` object pointed to by `ptr`.
70
+ *
71
+ * If the builder has no thread-context metadata, configures it to publish
72
+ * the `tlsdesc_v1_dev` schema and a key map containing `datadog.local_root_span_id`.
73
+ * If the thread-context metadata is already set, leaves it unchanged.
74
+ *
75
+ * This function only updates the builder. Call `ddog_tracer_metadata_store` to publish it.
76
+ *
77
+ * # Arguments
78
+ * - `ptr`: Pointer to a `TracerMetadata` instance.
79
+ *
80
+ * # Safety
81
+ * - If non-null, `ptr` must point to a valid, properly aligned, live `TracerMetadata`.
82
+ * - The caller must ensure exclusive access to the instance for the duration of the call.
83
+ * - Ownership remains with the caller
84
+ *
85
+ * # Returns
86
+ * - On success: `VoidResult::Ok`, also when thread-context metadata is already present
87
+ * - An error if `ptr` is null.
88
+ */
89
+ struct ddog_VoidResult ddog_tracer_metadata_include_otel_thread_context(struct ddog_TracerMetadata *ptr);
90
+
92
91
  /**
93
92
  * Serializes the `TracerMetadata` into a platform-specific memory handle (e.g., memfd on Linux).
94
93
  * This function also attempts to publish the tracer metadata as an OTel process context
@@ -108,6 +107,30 @@ void ddog_tracer_metadata_set(struct ddog_TracerMetadata *ptr,
108
107
  */
109
108
  struct ddog_Result_TracerMemfdHandle ddog_tracer_metadata_store(struct ddog_TracerMetadata *ptr);
110
109
 
110
+ void ddog_library_configurator_with_detect_process_info(struct ddog_Configurator *c);
111
+
112
+ struct ddog_LibraryConfigLoggedResult ddog_library_configurator_get(const struct ddog_Configurator *configurator);
113
+
114
+ /**
115
+ * Returns a static null-terminated string, containing the name of the environment variable
116
+ * associated with the library configuration
117
+ */
118
+ struct ddog_CStr ddog_library_config_source_to_string(enum ddog_LibraryConfigSource name);
119
+
120
+ /**
121
+ * Returns a static null-terminated string with the path to the managed stable config yaml
122
+ * config file
123
+ */
124
+ struct ddog_CStr ddog_library_config_fleet_stable_config_path(void);
125
+
126
+ /**
127
+ * Returns a static null-terminated string with the path to the local stable config yaml config
128
+ * file
129
+ */
130
+ struct ddog_CStr ddog_library_config_local_stable_config_path(void);
131
+
132
+ void ddog_library_config_drop(struct ddog_LibraryConfigLoggedResult config_result);
133
+
111
134
  #ifdef __cplusplus
112
135
  } // extern "C"
113
136
  #endif // __cplusplus
@@ -29,6 +29,15 @@ struct ddog_VoidResult ddog_otel_thread_ctx_sanity_check(void);
29
29
  /**
30
30
  * Allocate and initialise a new thread context, including its W3C trace-flags byte.
31
31
  *
32
+ * `trace_id`, `span_id`, and `local_root_span_id` use W3C Trace Context byte order,
33
+ * equivalent to big-endian when interpreted as integers.
34
+ *
35
+ * When representing an active trace, both `trace_id` and `span_id` must be nonzero. Otherwise,
36
+ * `trace_id`, `span_id`, and `trace_flags` must be zero.
37
+ *
38
+ * This function does not validate IDs or reject invalid combinations of `trace_id`, `span_id`,
39
+ * and `trace_flags`.
40
+ *
32
41
  * Returns a non-null owned handle that must eventually be released with
33
42
  * `ddog_otel_thread_ctx_free`.
34
43
  */
@@ -42,9 +51,11 @@ struct ddog_ThreadContextHandle *ddog_otel_thread_ctx_new(const uint8_t (*trace_
42
51
  *
43
52
  * # Safety
44
53
  *
54
+ * **`ctx` must not be a handle to a currently attached to a thread**. Only free detached
55
+ * contexts.
56
+ *
45
57
  * `ctx` must be a valid non-null pointer obtained from `ddog_otel_thread_ctx_new` or
46
- * `ddog_otel_thread_ctx_detach`, and must not be used after this call. In particular, `ctx`
47
- * must not be currently attached to a thread.
58
+ * `ddog_otel_thread_ctx_detach`, and must not be used after this call.
48
59
  */
49
60
  void ddog_otel_thread_ctx_free(struct ddog_ThreadContextHandle *ctx);
50
61
 
@@ -54,9 +65,10 @@ void ddog_otel_thread_ctx_free(struct ddog_ThreadContextHandle *ctx);
54
65
  *
55
66
  * # Safety
56
67
  *
57
- * `ctx` must be a valid non-null pointer obtained from this API. Ownership of `ctx` is
58
- * transferred to the TLS slot: the caller must not drop `ctx` while it is still actively
59
- * attached.
68
+ * Ownership of `ctx` is transferred to the TLS slot. **The caller must NOT free `ctx` while it
69
+ * is still actively attached**.
70
+ *
71
+ * `ctx` must be a valid non-null pointer obtained from this API.
60
72
  */
61
73
  struct ddog_ThreadContextHandle *ddog_otel_thread_ctx_attach(struct ddog_ThreadContextHandle *ctx);
62
74
 
@@ -70,6 +82,7 @@ struct ddog_ThreadContextHandle *ddog_otel_thread_ctx_detach(void);
70
82
 
71
83
  /**
72
84
  * Update the currently attached context in-place, including its W3C trace-flags byte.
85
+ * Uses the same ID byte order and zero-value rules as `ddog_otel_thread_ctx_new`.
73
86
  *
74
87
  * If no context is currently attached, one is created and attached, equivalent to calling
75
88
  * `ddog_otel_thread_ctx_new` followed by `ddog_otel_thread_ctx_attach`.
@@ -79,6 +92,23 @@ void ddog_otel_thread_ctx_update(const uint8_t (*trace_id)[16],
79
92
  uint8_t trace_flags,
80
93
  const uint8_t (*local_root_span_id)[8]);
81
94
 
95
+ /**
96
+ * Update `ctx` and attach it to the current thread. Returns the previously attached different
97
+ * context, if any. Uses the same ID byte order and zero-value rules as
98
+ * `ddog_otel_thread_ctx_new`.
99
+ *
100
+ * # Safety
101
+ *
102
+ * `ctx` may be null; otherwise it must be a valid non-null pointer obtained from this API.
103
+ * If attached, it must be attached only to the calling native thread and must not be
104
+ * concurrently updated or freed. A non-null returned context is owned by the caller.
105
+ */
106
+ struct ddog_ThreadContextHandle *ddog_otel_thread_ctx_update_and_attach(struct ddog_ThreadContextHandle *ctx,
107
+ const uint8_t (*trace_id)[16],
108
+ const uint8_t (*span_id)[8],
109
+ uint8_t trace_flags,
110
+ const uint8_t (*local_root_span_id)[8]);
111
+
82
112
  #ifdef __cplusplus
83
113
  } // extern "C"
84
114
  #endif // __cplusplus