From 17f2ee015bb576d7183834ed549d65d26faeb5a5 Mon Sep 17 00:00:00 2001 From: Yang Keao Date: Thu, 9 Jul 2020 10:13:07 +0800 Subject: [PATCH] support musl Signed-off-by: Yang Keao --- Cargo.toml | 1 + src/profiler.rs | 27 +++++++++++++++------------ 2 files changed, 16 insertions(+), 12 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 09d48fe4..b0eb8053 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -23,6 +23,7 @@ parking_lot = "0.11" symbolic-demangle = "7.4" tempfile = "3.1" thiserror = "1.0" +cfg-if = "0.1" inferno = { version = "0.10", default-features = false, features = ["nameattr"], optional = true } prost = { version = "0.6", optional = true } diff --git a/src/profiler.rs b/src/profiler.rs index d0f7d5bc..63242aef 100644 --- a/src/profiler.rs +++ b/src/profiler.rs @@ -101,21 +101,24 @@ fn write_thread_name_fallback(current_thread: libc::pthread_t, name: &mut [libc: } } -#[cfg(not(any(target_os = "linux", target_os = "macos")))] -fn write_thread_name(current_thread: libc::pthread_t, name: &mut [libc::c_char]) { - write_thread_name_fallback(current_thread, name); -} - -#[cfg(any(target_os = "linux", target_os = "macos"))] -fn write_thread_name(current_thread: libc::pthread_t, name: &mut [libc::c_char]) { - let name_ptr = name as *mut [libc::c_char] as *mut libc::c_char; - let ret = unsafe { libc::pthread_getname_np(current_thread, name_ptr, MAX_THREAD_NAME) }; - - if ret != 0 { - write_thread_name_fallback(current_thread, name); +cfg_if::cfg_if! { + if #[cfg(any(not(any(target_os = "linux", target_os = "macos")), target_env = "musl"))] { + fn write_thread_name(current_thread: libc::pthread_t, name: &mut [libc::c_char]) { + write_thread_name_fallback(current_thread, name); + } + } else { + fn write_thread_name(current_thread: libc::pthread_t, name: &mut [libc::c_char]) { + let name_ptr = name as *mut [libc::c_char] as *mut libc::c_char; + let ret = unsafe { libc::pthread_getname_np(current_thread, name_ptr, MAX_THREAD_NAME) }; + + if ret != 0 { + write_thread_name_fallback(current_thread, name); + } + } } } + #[no_mangle] extern "C" fn perf_signal_handler(_signal: c_int) { if let Some(mut guard) = PROFILER.try_write() {