From 0c58586c9cbdd4db62c9c127ba89fd4d1d53acd7 Mon Sep 17 00:00:00 2001 From: Badel2 <2badel2@gmail.com> Date: Fri, 7 Jan 2022 23:34:45 +0100 Subject: [PATCH] Add safety comments to panic::(set/take/update)_hook --- library/std/src/panicking.rs | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/library/std/src/panicking.rs b/library/std/src/panicking.rs index 19040cb12e0..44f573297ee 100644 --- a/library/std/src/panicking.rs +++ b/library/std/src/panicking.rs @@ -124,6 +124,11 @@ pub fn set_hook(hook: Box) + 'static + Sync + Send>) { panic!("cannot modify the panic hook from a panicking thread"); } + // SAFETY: + // + // - `HOOK` can only be modified while holding write access to `HOOK_LOCK`. + // - The argument of `Box::from_raw` is always a valid pointer that was created using + // `Box::into_raw`. unsafe { let guard = HOOK_LOCK.write(); let old_hook = HOOK; @@ -173,6 +178,11 @@ pub fn take_hook() -> Box) + 'static + Sync + Send> { panic!("cannot modify the panic hook from a panicking thread"); } + // SAFETY: + // + // - `HOOK` can only be modified while holding write access to `HOOK_LOCK`. + // - The argument of `Box::from_raw` is always a valid pointer that was created using + // `Box::into_raw`. unsafe { let guard = HOOK_LOCK.write(); let hook = HOOK; @@ -229,6 +239,11 @@ pub fn update_hook(hook_fn: F) panic!("cannot modify the panic hook from a panicking thread"); } + // SAFETY: + // + // - `HOOK` can only be modified while holding write access to `HOOK_LOCK`. + // - The argument of `Box::from_raw` is always a valid pointer that was created using + // `Box::into_raw`. unsafe { let guard = HOOK_LOCK.write(); let old_hook = HOOK; -- 2.44.0