summary |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
0e443c9)
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.
git-svn-id: svn://svn.tartarus.org/sgt/putty@7738
cda61777-01e9-0310-a592-
d414129be87e
ret = write(fd, senddata, sendlen);
if (ret > 0)
bufchain_consume(chain, ret);
ret = write(fd, senddata, sendlen);
if (ret > 0)
bufchain_consume(chain, ret);
+ else if (ret < 0 && errno != EWOULDBLOCK) {
perror(is_stderr ? "stderr: write" : "stdout: write");
exit(1);
}
perror(is_stderr ? "stderr: write" : "stdout: write");
exit(1);
}
local_tty = (tcgetattr(0, &orig_termios) == 0);
atexit(cleanup_termios);
ldisc_update(NULL, 1, 1);
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();
sending = FALSE;
now = GETTICKCOUNT();