@@ -24,6 +24,8 @@ type PyDumpTracebackThreadsFn = unsafe extern "C" fn(
2424static mut DUMP_TRACEBACK_FN : Option < PyDumpTracebackThreadsFn > = None ;
2525static DUMP_TRACEBACK_INIT : std:: sync:: Once = std:: sync:: Once :: new ( ) ;
2626
27+ // We define these raw system calls here to be used within signal handler context.
28+ // These direct C functions are preferred over going through Rust wrappers
2729extern "C" {
2830 fn pipe ( pipefd : * mut [ c_int ; 2 ] ) -> c_int ;
2931 fn read ( fd : c_int , buf : * mut c_void , count : usize ) -> isize ;
@@ -245,6 +247,8 @@ pub fn crashtracker_init<'py>(
245247 mut config : PyRefMut < ' py , CrashtrackerConfigurationPy > ,
246248 mut receiver_config : PyRefMut < ' py , CrashtrackerReceiverConfigPy > ,
247249 mut metadata : PyRefMut < ' py , CrashtrackerMetadataPy > ,
250+ // TODO: Add this back in post Code Freeze (need to update config registry)
251+ // emit_runtime_stacks: bool,
248252) -> anyhow:: Result < ( ) > {
249253 INIT . call_once ( || {
250254 let ( config_opt, receiver_config_opt, metadata_opt) = (
@@ -256,8 +260,16 @@ pub fn crashtracker_init<'py>(
256260 if let ( Some ( config) , Some ( receiver_config) , Some ( metadata) ) =
257261 ( config_opt, receiver_config_opt, metadata_opt)
258262 {
259- let runtime_stacktrace_enabled = std:: env:: var ( "DD_CRASHTRACKER_EMIT_RUNTIME_STACKS" ) . unwrap_or_default ( ) ;
260- if runtime_stacktrace_enabled == "true" || runtime_stacktrace_enabled == "1" {
263+ let should_emit_runtime_stacks = std:: env:: var ( "DD_CRASHTRACKING_EMIT_RUNTIME_STACKS" )
264+ . ok ( )
265+ . is_some_and ( |v| {
266+ matches ! (
267+ v. to_ascii_lowercase( ) . as_str( ) ,
268+ "true" | "yes" | "1"
269+ )
270+ } ) ;
271+
272+ if should_emit_runtime_stacks {
261273 unsafe {
262274 init_dump_traceback_fn ( ) ;
263275 }
0 commit comments