diff options
| author | Alex Crichton <alex@alexcrichton.com> | 2014-12-10 07:49:45 -0800 |
|---|---|---|
| committer | Aaron Turon <aturon@mozilla.com> | 2014-12-18 23:31:52 -0800 |
| commit | 4ffd9f49c340c350080bfe6c1be9e3aaccd549d0 (patch) | |
| tree | 23aff13e71e93fa2c73cea94bf6128f920220dfe /src/libstd/thread.rs | |
| parent | a7061d02e16d0821d3af2b753155fe44bab7725c (diff) | |
| download | rust-4ffd9f49c340c350080bfe6c1be9e3aaccd549d0.tar.gz rust-4ffd9f49c340c350080bfe6c1be9e3aaccd549d0.zip | |
Avoid .take().unwrap() with FnOnce closures
Diffstat (limited to 'src/libstd/thread.rs')
| -rw-r--r-- | src/libstd/thread.rs | 25 |
1 files changed, 14 insertions, 11 deletions
diff --git a/src/libstd/thread.rs b/src/libstd/thread.rs index f179219884f..7ccfe0ab74b 100644 --- a/src/libstd/thread.rs +++ b/src/libstd/thread.rs @@ -243,17 +243,20 @@ impl Cfg { // the thread itself. For these reasons, this unsafety should be ok. unsafe { let mut output = None; - let mut f_opt = Some( // option dance - if stdout.is_some() || stderr.is_some() { - proc() { - let _ = stdout.map(stdio::set_stdout); - let _ = stderr.map(stdio::set_stderr); - f() - } - } else { - f - }); - let try_result = unwind::try(|| output = Some((f_opt.take().unwrap())())); + let f = if stdout.is_some() || stderr.is_some() { + proc() { + let _ = stdout.map(stdio::set_stdout); + let _ = stderr.map(stdio::set_stderr); + f() + } + } else { + f + }; + + let try_result = { + let ptr = &mut output; + unwind::try(move || *ptr = Some(f())) + }; match (output, try_result) { (Some(data), Ok(_)) => after(Ok(data)), (None, Err(cause)) => after(Err(cause)), |
