Avoid useless keepalive msgs that would kill an older rsync.
authorWayne Davison <wayned@samba.org>
Mon, 11 Nov 2013 00:15:30 +0000 (16:15 -0800)
committerWayne Davison <wayned@samba.org>
Mon, 11 Nov 2013 00:15:39 +0000 (16:15 -0800)
This fix avoids the sending of keep-alive messages from the receiver
to the sender when we are still sending the file list (at which time
an older rsync would die if it received such a keep-alive message).
The messages aren't actually needed, since we haven't forked yet, and
the single flow of data keeps the procs alive.

io.c

diff --git a/io.c b/io.c
index 2a87919fe8962aa1263ed87521788832d476ab94..c5b1ebc4c6c54a2270605c04fa4a19c108e76948 100644 (file)
--- a/io.c
+++ b/io.c
@@ -1371,6 +1371,14 @@ void maybe_send_keepalive(time_t now, int flags)
        if (flags & MSK_ACTIVE_RECEIVER)
                last_io_in = now; /* Fudge things when we're working hard on the files. */
 
+       /* Early in the transfer (before the receiver forks) the receiving side doesn't
+        * care if it hasn't sent data in a while as long as it is receiving data (in
+        * fact, a pre-3.1.0 rsync would die if we tried to send it a keep alive during
+        * this time).  So, if we're an early-receiving proc, just return and let the
+        * incoming data determine if we timeout. */
+       if (!am_sender && !am_receiver && !am_generator)
+               return;
+
        if (now - last_io_out >= allowed_lull) {
                /* The receiver is special:  it only sends keep-alive messages if it is
                 * actively receiving data.  Otherwise, it lets the generator timeout. */