Add note about possible safety issue with GLOBAL_NODE

This commit is contained in:
Mahmoud Al-Qudsi 2024-05-16 20:15:34 -05:00
parent 66618d64cb
commit ec1bf60941

View File

@ -273,6 +273,10 @@ impl Iterator for EnvNodeIter {
}
lazy_static! {
/// XXX: Possible safety issue here as EnvNodeRef is not Send/Sync and shouldn't
/// be placed in a static context without some sort of Send/Sync wrapper.
/// lazy_static papers over this but it triggers rust lints if you use
/// once_cell::sync::Lazy or std::sync::OnceLock instead.
static ref GLOBAL_NODE: EnvNodeRef = EnvNodeRef::new(false, None);
}
@ -699,6 +703,7 @@ pub struct EnvStackImpl {
impl EnvStackImpl {
/// Return a new impl representing global variables, with a single local scope.
pub fn new() -> EnvMutex<EnvStackImpl> {
// XXX: Safety issue: We are accessing GLOBAL_NODE without having the global mutex locked!
let globals = GLOBAL_NODE.clone();
let locals = EnvNodeRef::new(false, None);
let base = EnvScopedImpl::new(locals, globals);