From c51aec1af60365a0d4b78b4ad8e87a65b05d85fe Mon Sep 17 00:00:00 2001 From: Jeremy Soller <jeremy@system76.com> Date: Tue, 30 Nov 2021 21:19:48 -0700 Subject: [PATCH] Workaround waitpid deadlock by making ptrace state thread local --- src/platform/redox/ptrace.rs | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/platform/redox/ptrace.rs b/src/platform/redox/ptrace.rs index 8ad336cae..b2933a952 100644 --- a/src/platform/redox/ptrace.rs +++ b/src/platform/redox/ptrace.rs @@ -39,10 +39,17 @@ impl State { } } -static STATE: Once<State> = Once::new(); +#[thread_local] +static mut STATE: Option<State> = None; pub fn init_state() -> &'static State { - STATE.call_once(|| State::new()) + // Safe due to STATE being thread_local + unsafe { + if STATE.is_none() { + STATE = Some(State::new()) + } + STATE.as_ref().unwrap() + } } pub fn is_traceme(pid: pid_t) -> bool { File::open( -- GitLab