Fix an easy to trigger deadlock in std::io::stdio
Being a person who somehow has taken a liking to premature optimisation, my knee-jerk reaction to
locking in std handles was preamble resembling following snippet:
let stdout = stdout();
let lstdout = stdout.lock();
let stdin = stdin();
let lstdin = stdin.lock();
and then reading from the locked handle like this:
let mut letter = [0; 1];
lstdin.read(&mut letter).unwrap();
As it is now this code will deadlock because the `read` method attempts to lock stdout as well!
This commit is contained in:
@@ -157,9 +157,6 @@ impl Read for Stdin {
|
||||
|
||||
impl<'a> Read for StdinLock<'a> {
|
||||
fn read(&mut self, buf: &mut [u8]) -> io::Result<usize> {
|
||||
// Flush stdout so that weird issues like a print!'d prompt not being
|
||||
// shown until after the user hits enter.
|
||||
drop(stdout().flush());
|
||||
self.inner.read(buf)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user