I noticed that the output of "rsync -n" is sometimes truncated. Even when you repeat the same command, the output may be different. I'm using rsync-2.5.5 on a Debian woody system with ext3 file systems. One scenario to reproduce this behavior is someting like this: # rsync -aR /usr/share/zoneinfo /tmp # rsync -n -avRH localhost:/usr/share/zoneinfo /tmp receiving file list ... done usr/share/zoneinfo/Asia/Dhaka => usr/share/zoneinfo/Asia/Dacca usr/share/zoneinfo/Asia/Thimphu => usr/share/zoneinfo/Asia/Thimbu usr/share/zoneinfo/PRC => usr/share/zoneinfo/Asia/Shanghai usr/share/zoneinfo/Asia/Chungking => usr/share/zoneinfo/Asia/Chongqing usr/share/zoneinfo/Hongkong => usr/share/zoneinfo/Asia/Hong_Kong usr/share/zoneinfo/ROC => usr/share/zoneinfo/Asia/Taipei [...] wrote 16 bytes read 37138 bytes 24769.33 bytes/sec total size is 865270 speedup is 23.29 # rsync -n -avRH /usr/share/zoneinfo /tmp building file list ... done usr/share/zoneinfo/Asia/Dhaka => usr/share/zoneinfo/Asia/Dacca usr/share/zoneinfo/Asia/Thimphu => usr/share/zoneinfo/Asia/Thimbu wrote 37134 bytes read 20 bytes 74308.00 bytes/sec total size is 865270 speedup is 23.29 As you can see, the output of the last command is truncated. The problem is that the output is written in non-blocking mode, and that when the write() returns EAGAIN, the output may be discarded. The attached patch adds a check for EAGAIN, and retries the write() after 20 msec, which fixes the problem. -- Dick Streefland //// Altium Software BV dick.streefland@altium.nl (@ @) http://www.altium.com --------------------------------oOO--(_)--OOo--------------------------- -------------- next part -------------- --- rsync-2.5.5/log.c.orig Mon Feb 18 20:51:12 2002 +++ rsync-2.5.5/log.c Wed May 15 16:12:18 2002 @@ -116,7 +116,12 @@ int n = write(log_error_fd, el->buf+el->written, el->len - el->written); /* don't check for an error if the best way of handling the error is to ignore it */ - if (n == -1) break; + if (n == -1) { + if (errno == EAGAIN) { + msleep(20); + } + break; + } if (n > 0) { el->written += n; }