Skip to content

Commit

Permalink
Rollup merge of rust-lang#51973 - estk:master, r=abonander
Browse files Browse the repository at this point in the history
Make Stdio handle UnwindSafe

Closes  rust-lang#51863

This is my first compiler PR. Thanks Niko for the mentor help!

r? @nikomatsakis
  • Loading branch information
pietroalbini authored Jul 3, 2018
2 parents 33b065d + 9797665 commit ce8f206
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 0 deletions.
22 changes: 22 additions & 0 deletions src/libstd/io/stdio.rs
Original file line number Diff line number Diff line change
Expand Up @@ -712,9 +712,31 @@ pub fn _eprint(args: fmt::Arguments) {

#[cfg(test)]
mod tests {
use panic::{UnwindSafe, RefUnwindSafe};
use thread;
use super::*;

#[test]
fn stdout_unwind_safe() {
assert_unwind_safe::<Stdout>();
}
#[test]
fn stdoutlock_unwind_safe() {
assert_unwind_safe::<StdoutLock>();
assert_unwind_safe::<StdoutLock<'static>>();
}
#[test]
fn stderr_unwind_safe() {
assert_unwind_safe::<Stderr>();
}
#[test]
fn stderrlock_unwind_safe() {
assert_unwind_safe::<StderrLock>();
assert_unwind_safe::<StderrLock<'static>>();
}

fn assert_unwind_safe<T: UnwindSafe + RefUnwindSafe>() {}

#[test]
#[cfg_attr(target_os = "emscripten", ignore)]
fn panic_doesnt_poison() {
Expand Down
4 changes: 4 additions & 0 deletions src/libstd/sys_common/remutex.rs
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ use marker;
use ops::Deref;
use sys_common::poison::{self, TryLockError, TryLockResult, LockResult};
use sys::mutex as sys;
use panic::{UnwindSafe, RefUnwindSafe};

/// A re-entrant mutual exclusion
///
Expand All @@ -28,6 +29,9 @@ pub struct ReentrantMutex<T> {
unsafe impl<T: Send> Send for ReentrantMutex<T> {}
unsafe impl<T: Send> Sync for ReentrantMutex<T> {}

impl<T> UnwindSafe for ReentrantMutex<T> {}
impl<T> RefUnwindSafe for ReentrantMutex<T> {}


/// An RAII implementation of a "scoped lock" of a mutex. When this structure is
/// dropped (falls out of scope), the lock will be unlocked.
Expand Down

0 comments on commit ce8f206

Please sign in to comment.