about summary refs log tree commit diff
diff options
context:
space:
mode:
authorMara Bos <m-ou.se@m-ou.se>2020-09-27 15:35:35 +0200
committerMara Bos <m-ou.se@m-ou.se>2020-09-27 16:04:25 +0200
commitde597fca40d129435c53a69c6662d7bfac29771d (patch)
tree24e8477e68c4a9da6561ce090429043f0948a8cd
parented3ead013f40c65e2972c794a71b756237a31b46 (diff)
downloadrust-de597fca40d129435c53a69c6662d7bfac29771d.tar.gz
rust-de597fca40d129435c53a69c6662d7bfac29771d.zip
Optimize set_{panic,print}(None).
-rw-r--r--library/std/src/io/stdio.rs8
1 files changed, 8 insertions, 0 deletions
diff --git a/library/std/src/io/stdio.rs b/library/std/src/io/stdio.rs
index df83c329829..36b49401591 100644
--- a/library/std/src/io/stdio.rs
+++ b/library/std/src/io/stdio.rs
@@ -905,6 +905,10 @@ impl fmt::Debug for StderrLock<'_> {
 #[doc(hidden)]
 pub fn set_panic(sink: Option<Box<dyn Write + Send>>) -> Option<Box<dyn Write + Send>> {
     use crate::mem;
+    if sink.is_none() && !LOCAL_STREAMS.load(Ordering::Relaxed) {
+        // LOCAL_STDERR is definitely None since LOCAL_STREAMS is false.
+        return None;
+    }
     let s = LOCAL_STDERR.with(move |slot| mem::replace(&mut *slot.borrow_mut(), sink)).and_then(
         |mut s| {
             let _ = s.flush();
@@ -932,6 +936,10 @@ pub fn set_panic(sink: Option<Box<dyn Write + Send>>) -> Option<Box<dyn Write +
 #[doc(hidden)]
 pub fn set_print(sink: Option<Box<dyn Write + Send>>) -> Option<Box<dyn Write + Send>> {
     use crate::mem;
+    if sink.is_none() && !LOCAL_STREAMS.load(Ordering::Relaxed) {
+        // LOCAL_STDOUT is definitely None since LOCAL_STREAMS is false.
+        return None;
+    }
     let s = LOCAL_STDOUT.with(move |slot| mem::replace(&mut *slot.borrow_mut(), sink)).and_then(
         |mut s| {
             let _ = s.flush();