aboutsummaryrefslogtreecommitdiffstats
path: root/io.c
diff options
context:
space:
mode:
authorWayne Davison <wayned@samba.org>2005-02-26 20:58:05 +0000
committerWayne Davison <wayned@samba.org>2005-02-26 20:58:05 +0000
commit574c250093f19e1876c4af0de704ac219783b805 (patch)
treec90357481c22a81724446a38b21a98cd6bbc7538 /io.c
parent8dad7fc6eace2c406c279ce98a00653085c700ca (diff)
downloadandroid_external_rsync-574c250093f19e1876c4af0de704ac219783b805.tar.gz
android_external_rsync-574c250093f19e1876c4af0de704ac219783b805.tar.bz2
android_external_rsync-574c250093f19e1876c4af0de704ac219783b805.zip
If kluge_around_eof is < 0, we go into an msleep() loop instead
of exiting.
Diffstat (limited to 'io.c')
-rw-r--r--io.c20
1 files changed, 12 insertions, 8 deletions
diff --git a/io.c b/io.c
index b0c13fc7..2a7d7762 100644
--- a/io.c
+++ b/io.c
@@ -76,11 +76,11 @@ int batch_gen_fd = -1;
const char *io_write_phase = phase_unknown;
const char *io_read_phase = phase_unknown;
-/* Ignore EOF errors while reading a module listing if the remote
- * version is 24 or less. Also used by the receiver when it is
- * reading a potential end-of-transfer keep-alive message that
- * may never come. */
-int kludge_around_eof = False;
+/* Ignore an EOF error if non-zero. We exit if the value is 1 (used while
+ * reading a module listing if the remote version is 24 or less) or go into a
+ * sleep loop if the value is 2 (used by the receiver when it is reading a
+ * potential end-of-transfer keep-alive message that may never come). */
+int kluge_around_eof = 0;
int msg_fd_in = -1;
int msg_fd_out = -1;
@@ -372,12 +372,16 @@ void io_set_filesfrom_fds(int f_in, int f_out)
* rsync <2.4.6 sending a list of modules on a server, since the list
* is terminated by closing the socket. So, for the section of the
* program where that is a problem (start_socket_client),
- * kludge_around_eof is True and we just exit.
+ * kluge_around_eof is True and we just exit.
*/
static void whine_about_eof(int fd)
{
- if (kludge_around_eof && fd == sock_f_in)
- exit_cleanup(0);
+ if (kluge_around_eof && fd == sock_f_in) {
+ if (kluge_around_eof > 0)
+ exit_cleanup(0);
+ while (1)
+ msleep(20);
+ }
rprintf(FERROR, RSYNC_NAME ": connection unexpectedly closed "
"(%.0f bytes received so far) [%s]\n",