diff --git a/profiling/src/profiling/thread_utils.rs b/profiling/src/profiling/thread_utils.rs index e8f9acbb6b..5f79f28d57 100644 --- a/profiling/src/profiling/thread_utils.rs +++ b/profiling/src/profiling/thread_utils.rs @@ -4,6 +4,7 @@ use std::mem::MaybeUninit; use std::thread::JoinHandle; use std::time::{Duration, Instant}; +use crate::sapi::Sapi; use crate::SAPI; /// Spawns a thread and masks off the signals that the Zend Engine uses. @@ -77,23 +78,26 @@ pub fn get_current_thread_name() -> String { #[cfg(php_zts)] { - let mut name = [0u8; 32]; - - let result = unsafe { - libc::pthread_getname_np( - libc::pthread_self(), - name.as_mut_ptr() as *mut c_char, - name.len(), - ) - }; - - if result == 0 { - // If successful, convert the result to a Rust String - let cstr = unsafe { std::ffi::CStr::from_ptr(name.as_ptr() as *const c_char) }; - let str_slice: &str = cstr.to_str().unwrap(); - if !str_slice.is_empty() { - thread_name.push_str(": "); - thread_name.push_str(str_slice); + // So far, only FrankenPHP sets meaningful thread names + if *SAPI == Sapi::FrankenPHP { + let mut name = [0u8; 32]; + + let result = unsafe { + libc::pthread_getname_np( + libc::pthread_self(), + name.as_mut_ptr() as *mut c_char, + name.len(), + ) + }; + + if result == 0 { + // If successful, convert the result to a Rust String + let cstr = unsafe { std::ffi::CStr::from_ptr(name.as_ptr() as *const c_char) }; + let str_slice: &str = cstr.to_str().unwrap(); + if !str_slice.is_empty() { + thread_name.push_str(": "); + thread_name.push_str(str_slice); + } } } } @@ -117,23 +121,5 @@ mod tests { ); } assert_eq!(get_current_thread_name(), "unknown"); - - unsafe { - libc::pthread_setname_np( - #[cfg(target_os = "linux")] - libc::pthread_self(), - b"foo\0".as_ptr() as *const c_char, - ); - } - assert_eq!(get_current_thread_name(), "unknown: foo"); - - unsafe { - libc::pthread_setname_np( - #[cfg(target_os = "linux")] - libc::pthread_self(), - b"bar\0".as_ptr() as *const c_char, - ); - } - assert_eq!(get_current_thread_name(), "unknown: bar"); } } diff --git a/profiling/tests/correctness/exceptions_zts.json b/profiling/tests/correctness/exceptions_zts.json index 509ebbcdde..622595d123 100644 --- a/profiling/tests/correctness/exceptions_zts.json +++ b/profiling/tests/correctness/exceptions_zts.json @@ -25,7 +25,9 @@ }, { "key": "thread name", - "values_regex": "^cli.*$" + "values": [ + "cli" + ] } ] }