summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Tridgell <tridge@samba.org>2000-08-29 05:07:08 +0000
committerAndrew Tridgell <tridge@samba.org>2000-08-29 05:07:08 +0000
commite92ee12893ca6320f5331384b2c2e8560ca9c88a (patch)
tree26914254ca5eea9aeb3251e9876ceba99f5abbf1
parent5c66303ad6a6bd195b3d5a982f706aa51e686bac (diff)
downloadrsync-e92ee12893ca6320f5331384b2c2e8560ca9c88a.tar.gz
make sure we don't chew too much CPU when the outgoing fd is full
-rw-r--r--io.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/io.c b/io.c
index b469d8be..2f4162cd 100644
--- a/io.c
+++ b/io.c
@@ -372,6 +372,7 @@ static void writefd_unbuffered(int fd,char *buf,int len)
if (ret == -1 &&
(errno == EWOULDBLOCK || errno == EAGAIN)) {
+ msleep(1);
continue;
}
@@ -463,6 +464,17 @@ void io_end_buffering(int fd)
}
}
+/* some OSes have a bug where an exit causes the pending writes on
+ a socket to be flushed. Do an explicit shutdown to try to prevent this */
+void io_shutdown(void)
+{
+ if (multiplex_out_fd != -1) close(multiplex_out_fd);
+ if (io_error_fd != -1) close(io_error_fd);
+ multiplex_out_fd = -1;
+ io_error_fd = -1;
+}
+
+
static void writefd(int fd,char *buf,int len)
{
stats.total_written += len;