Closed
Description
Here is some code from at_exit_impl.rs
:
pub fn init() {
let state: Box<Queue> = box Exclusive::new(Vec::new());
unsafe {
rtassert!(!RUNNING.load(atomics::SeqCst));
rtassert!(QUEUE.swap(mem::transmute(state), atomics::SeqCst) == 0);
}
}
The above calls are using the rtassert!(..)
macro from macros.rs:
macro_rules! rtassert (
( $arg:expr ) => ( {
if ::util::ENFORCE_SANITY {
if !$arg {
rtabort!(" assertion failed: {}", stringify!($arg));
}
}
} )
)
Notably, that macro will only evaluate its argument expressions if ::util::ENFORCE_SANITY
is true.
This means that the init()
is a no-op if ::util::ENFORCE_SANITY
is false. That is probably not what we intended.
We should probably either change the init()
code to first run each expression and then pass their return value to the rtassert!
macro, or change the rtassert!
macro to unconditionally evaluate its argument.
Metadata
Metadata
Assignees
Labels
No labels