Skip to content

Commit 00b919d

Browse files
committed
Merge pull request #19869 from sfackler/free-stdin
Free stdin on exit Reviewed-by: aturon
2 parents 175795e + 8d6895a commit 00b919d

File tree

2 files changed

+20
-0
lines changed

2 files changed

+20
-0
lines changed

src/libstd/io/stdio.rs

+7
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ use option::Option;
4141
use option::Option::{Some, None};
4242
use ops::{Deref, DerefMut, FnOnce};
4343
use result::Result::{Ok, Err};
44+
use rt;
4445
use rustrt;
4546
use rustrt::local::Local;
4647
use rustrt::task::Task;
@@ -224,6 +225,12 @@ pub fn stdin() -> StdinReader {
224225
inner: Arc::new(Mutex::new(stdin))
225226
};
226227
STDIN = mem::transmute(box stdin);
228+
229+
// Make sure to free it at exit
230+
rt::at_exit(|| {
231+
mem::transmute::<_, Box<StdinReader>>(STDIN);
232+
STDIN = 0 as *const _;
233+
});
227234
});
228235

229236
(*STDIN).clone()
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
// Copyright 2014 The Rust Project Developers. See the COPYRIGHT
2+
// file at the top-level directory of this distribution and at
3+
// http://rust-lang.org/COPYRIGHT.
4+
//
5+
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
6+
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
7+
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
8+
// option. This file may not be copied, modified, or distributed
9+
// except according to those terms.
10+
11+
fn main() {
12+
let _ = std::io::stdin();
13+
}

0 commit comments

Comments
 (0)