Cygwin1.dll 1.7.0-5x: RSYNC failures in close() system call on pipe file descriptors

cygwin at sipxx.com cygwin@sipxx.com
Wed Aug 19 18:07:00 GMT 2009


Follow-up:
I can confirm that your example using rsync to fetch a remote tree also 
fails on my system.
I built a work-around into cygwin1.dll that solves the first failure 
cases in which socketpair() is involved on a system-wide basis, so 
individual applications don't have to be patched. The problem is not 
unique to rsync.
Your case appears indeed different on the surface, but I suspect the 
underlying root cause is likely the same.

$ rsync -av --delete --exclude=.svn tug.org::tldevsrc/Build/source/ 
/tmp/tl-src
receiving incremental file list
rsync: read error: Socket operation on non-socket (108)
rsync error: error in rsync protocol data stream (code 12) at 
/home/lapo/packaging/rsync-3.0.5-1/src/rsync-3.0.5/io.c(759) 
[receiver=3.0.5]
rsync: connection unexpectedly closed (363 bytes received so far) 
[generator]
rsync error: error in rsync protocol data stream (code 12) at 
/home/lapo/packaging/rsync-3.0.5-1/src/rsync-3.0.5/io.c(600) 
[generator=3.0.5]

The problem occurs when a socket gets dup()'ed, both file descriptors 
should work interchangeably for i/o, but the second descriptor clearly 
doesn't. It either hangs or produces exceptions on reading or writing, 
and fails on close.
On my system, this happens only when using IPv4 transport, under IPv6 it 
seems to work fine.
I reported initially that this only happens when duping to STDIN, but 
that was wrong, a result of a typo in the test program.

I checked for interfering programs against the list, not running any of 
them. The system doesn't run any antivirus or firewalling software either.
Since this works fine with cygwin 1.5, there must be some changes in 1.7 
that interfere with some programs using the IPv4 stack somehow.

-Karl

[this is a resend, seems this didn't make it to the list in an earlier 
transmission]




Angelo Graziosi wrote:
> For the sake of completeness...
>
> I wrote:
>
>> May you give some more details? For example, should I rebuild under
>> Cygwin-1.5 or 1.7? with cygport (but which uses rsync, sigh!)? which
>> patch to apply?...
>
> I have rebuilt rsync-3.05 both on Cygwin-1.5 and 1.7 applying this patch:
>
> --- util.c.orig 2008-11-15 23:17:49.000000000 +0100
> +++ util.c      2009-08-16 03:07:20.390625000 +0200
> @@ -78,11 +78,7 @@
>  {
>         int ret;
>
> -#ifdef HAVE_SOCKETPAIR
> -       ret = socketpair(AF_UNIX, SOCK_STREAM, 0, fd);
> -#else
>         ret = pipe(fd);
> -#endif
>
>         if (ret == 0) {
>                 set_nonblocking(fd[0]);
>
> Using the resulting binaries on Cygwin-1.7, there is a little step
> forward. Now
>
> $ ./rsync -av downloads /tmp
>
> works, but
>
> ./rsync -av --delete --exclude=.svn tug.org::tldevsrc/Build/source/ 
> /tmp/tl-src
>
> does NOT! :-(
>
>
> Cheers,
>    Angelo.
>


--
Problem reports:       http://cygwin.com/problems.html
FAQ:                   http://cygwin.com/faq/
Documentation:         http://cygwin.com/docs.html
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple



More information about the Cygwin mailing list