X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/50b31539c26885ec2ff9d566e771f7a1ac2a1e20..da6eb9d123caf52640ae0cd6017fb0b657188c89:/main.c diff --git a/main.c b/main.c index 4f3fd909..03af24bb 100644 --- a/main.c +++ b/main.c @@ -657,6 +657,16 @@ int client_run(int f_in, int f_out, pid_t pid, int argc, char *argv[]) if (protocol_version >= 23 && !read_batch) io_start_multiplex_in(); + /* We set our stderr file handle to blocking because ssh might have + * set it to non-blocking. This can be particularly troublesome if + * stderr is a clone of stdout, because ssh would have set our stdout + * to non-blocking at the same time (which can easily cause us to lose + * output from our print statements). This kluge shouldn't cause ssh + * any problems for how we use it. Note also that we delayed setting + * this until after the above protocol setup so that we know for sure + * that ssh is done twiddling its file descriptors. */ + set_blocking(STDERR_FILENO); + if (am_sender) { keep_dirlinks = 0; /* Must be disabled on the sender. */ io_start_buffering_out();