This is the mail archive of the cygwin mailing list for the Cygwin project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

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


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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]