mirror of
https://git.tartarus.org/simon/putty.git
synced 2025-04-09 23:28:06 -05:00
stdout and stderr should be made O_NONBLOCK so that we don't end up blocking
the entire process because stdout is busy. Arguably, this shouldn't apply to stderr when we're printing our own error messages to it, but I'll leave that fix for another time. [originally from svn r7738]
This commit is contained in:
parent
22f9618deb
commit
d0db31a1ca
@ -385,7 +385,7 @@ void try_output(int is_stderr)
|
||||
ret = write(fd, senddata, sendlen);
|
||||
if (ret > 0)
|
||||
bufchain_consume(chain, ret);
|
||||
else if (ret < 0) {
|
||||
else if (ret < 0 && errno != EWOULDBLOCK) {
|
||||
perror(is_stderr ? "stderr: write" : "stdout: write");
|
||||
exit(1);
|
||||
}
|
||||
@ -883,6 +883,23 @@ int main(int argc, char **argv)
|
||||
local_tty = (tcgetattr(0, &orig_termios) == 0);
|
||||
atexit(cleanup_termios);
|
||||
ldisc_update(NULL, 1, 1);
|
||||
|
||||
{
|
||||
int fl;
|
||||
/*
|
||||
* Make sure that stdout/err are non-blocking.
|
||||
*/
|
||||
if ((fl = fcntl(1, F_GETFL)) == -1 ||
|
||||
fcntl(1, F_SETFL, fl | O_NONBLOCK) == -1) {
|
||||
perror("stdout");
|
||||
exit(1);
|
||||
}
|
||||
if ((fl = fcntl(2, F_GETFL)) == -1 ||
|
||||
fcntl(2, F_SETFL, fl | O_NONBLOCK) == -1) {
|
||||
perror("stderr");
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
sending = FALSE;
|
||||
now = GETTICKCOUNT();
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user