diff options
| author | Alex Crichton <alex@alexcrichton.com> | 2013-10-05 21:58:55 -0700 |
|---|---|---|
| committer | Alex Crichton <alex@alexcrichton.com> | 2013-10-09 12:38:18 -0700 |
| commit | 8fcf62b6385a5be4ef3a8e1bdb0f01ce907abd26 (patch) | |
| tree | fd23aa0117a06bc0cf5827b374744abe32506880 /src/libstd/macros.rs | |
| parent | acf9783879dca0db0721c10ac79c9078f2dec425 (diff) | |
| download | rust-8fcf62b6385a5be4ef3a8e1bdb0f01ce907abd26.tar.gz rust-8fcf62b6385a5be4ef3a8e1bdb0f01ce907abd26.zip | |
Don't abort if the runtime is run twice.
This changes an `assert_once_ever!` assertion to just a plain old assertion around an atomic boolean to ensure that one particular runtime doesn't attempt to exit twice. Closes #9739
Diffstat (limited to 'src/libstd/macros.rs')
| -rw-r--r-- | src/libstd/macros.rs | 38 |
1 files changed, 0 insertions, 38 deletions
diff --git a/src/libstd/macros.rs b/src/libstd/macros.rs index 0b1475ff380..2ef25548535 100644 --- a/src/libstd/macros.rs +++ b/src/libstd/macros.rs @@ -42,41 +42,3 @@ macro_rules! rtabort( ::rt::util::abort(format!($($msg)*)); } ) ) - -macro_rules! assert_once_ever( - ($($msg:tt)+) => ( { - // FIXME(#8472) extra function should not be needed to hide unsafe - fn assert_once_ever() { - unsafe { - static mut already_happened: int = 0; - // Double-check lock to avoid a swap in the common case. - if already_happened != 0 || - ::unstable::intrinsics::atomic_xchg_relaxed(&mut already_happened, 1) != 0 { - fail2!("assert_once_ever happened twice: {}", - format!($($msg)+)); - } - } - } - assert_once_ever(); - } ) -) - -#[cfg(test)] -mod tests { - #[test] - fn test_assert_once_ever_ok() { - assert_once_ever!("help i'm stuck in an"); - assert_once_ever!("assertion error message"); - } - - #[test] #[ignore(cfg(windows))] #[should_fail] - fn test_assert_once_ever_fail() { - use task; - - fn f() { assert_once_ever!("if you're seeing this... good!") } - - // linked & watched, naturally - task::spawn(f); - task::spawn(f); - } -} |
