about summary refs log tree commit diff
path: root/src/libstd/io
diff options
context:
space:
mode:
authorAlex Crichton <alex@alexcrichton.com>2014-12-17 08:34:44 -0800
committerAlex Crichton <alex@alexcrichton.com>2014-12-17 11:50:27 -0800
commit64faa74d08aa89fa3c4f46da386d4aa453fc0819 (patch)
tree29ca178c8075f9fb18123b4227c23f78b24eab50 /src/libstd/io
parent03e970f043e3482a21936d26ea4b6bc504d845b1 (diff)
parent8d6895a9c097a90bb00459eccacb6ba06c6437f9 (diff)
downloadrust-64faa74d08aa89fa3c4f46da386d4aa453fc0819.tar.gz
rust-64faa74d08aa89fa3c4f46da386d4aa453fc0819.zip
rollup merge of #19869: sfackler/free-stdin
r? @aturon
Diffstat (limited to 'src/libstd/io')
-rw-r--r--src/libstd/io/stdio.rs7
1 files changed, 7 insertions, 0 deletions
diff --git a/src/libstd/io/stdio.rs b/src/libstd/io/stdio.rs
index c180476efb8..844814fbfdd 100644
--- a/src/libstd/io/stdio.rs
+++ b/src/libstd/io/stdio.rs
@@ -41,6 +41,7 @@ use option::Option;
 use option::Option::{Some, None};
 use ops::{Deref, DerefMut, FnOnce};
 use result::Result::{Ok, Err};
+use rt;
 use rustrt;
 use rustrt::local::Local;
 use rustrt::task::Task;
@@ -224,6 +225,12 @@ pub fn stdin() -> StdinReader {
                 inner: Arc::new(Mutex::new(stdin))
             };
             STDIN = mem::transmute(box stdin);
+
+            // Make sure to free it at exit
+            rt::at_exit(|| {
+                mem::transmute::<_, Box<StdinReader>>(STDIN);
+                STDIN = 0 as *const _;
+            });
         });
 
         (*STDIN).clone()