From ab3e4a27894295ec0fca28b492450f2b22fbad4e Mon Sep 17 00:00:00 2001 From: Ralf Jung Date: Mon, 6 Aug 2018 13:53:38 +0200 Subject: [PATCH] argue why at_exit_imp is fine --- src/libstd/sys_common/at_exit_imp.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/libstd/sys_common/at_exit_imp.rs b/src/libstd/sys_common/at_exit_imp.rs index 633605039afd..30019088eb68 100644 --- a/src/libstd/sys_common/at_exit_imp.rs +++ b/src/libstd/sys_common/at_exit_imp.rs @@ -64,6 +64,7 @@ pub fn cleanup() { if !queue.is_null() { let queue: Box = Box::from_raw(queue); for to_run in *queue { + // We are not holding any lock, so reentrancy is fine. to_run(); } } @@ -75,9 +76,8 @@ pub fn push(f: Box) -> bool { unsafe { let _guard = LOCK.lock(); if init() { - // This could reentrantly call `push` again, which is a problem because - // `LOCK` allows reentrancy! - // FIXME: Add argument why this is okay. + // We are just moving `f` around, not calling it. + // There is no possibility of reentrancy here. (*QUEUE).push(f); true } else {