about summary refs log tree commit diff
path: root/src/libstd/io
diff options
context:
space:
mode:
authorSteven Fackler <sfackler@gmail.com>2014-12-14 23:36:50 -0800
committerSteven Fackler <sfackler@gmail.com>2014-12-14 23:36:50 -0800
commit8d6895a9c097a90bb00459eccacb6ba06c6437f9 (patch)
tree1d3c1b3aed2d0c439278bde7e402844089f109c3 /src/libstd/io
parent126db549b038c84269a1e4fe46f051b2c15d6970 (diff)
downloadrust-8d6895a9c097a90bb00459eccacb6ba06c6437f9.tar.gz
rust-8d6895a9c097a90bb00459eccacb6ba06c6437f9.zip
Free stdin on exit
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 344012a09a0..548dfdd6273 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()