delorie.com/archives/browse.cgi   search  
Mail Archives: cygwin/2001/08/06/08:17:28

Mailing-List: contact cygwin-help AT sourceware DOT cygnus DOT com; run by ezmlm
List-Subscribe: <mailto:cygwin-subscribe AT sources DOT redhat DOT com>
List-Archive: <http://sources.redhat.com/ml/cygwin/>
List-Post: <mailto:cygwin AT sources DOT redhat DOT com>
List-Help: <mailto:cygwin-help AT sources DOT redhat DOT com>, <http://sources.redhat.com/ml/#faqs>
Sender: cygwin-owner AT sources DOT redhat DOT com
Delivered-To: mailing list cygwin AT sources DOT redhat DOT com
Message-ID: <3B6E88FE.70BF483@hplb.hpl.hp.com>
Date: Mon, 06 Aug 2001 13:09:34 +0100
From: Bill Petheram <bilpet AT hplb DOT hpl DOT hp DOT com>
Organization: TESL, HP Labs Bristol
X-Mailer: Mozilla 4.77 [en] (X11; U; Linux 2.4.3-20mdksmp i686)
X-Accept-Language: en
MIME-Version: 1.0
To: Corinna Vinschen <cygwin AT cygwin DOT com>, Lapo Luchini <lapo AT lapo DOT it>
Subject: Re: Rsync: found the problem
References: <610A1F4808E9D411888F0001023F6361A2EC AT MUCX> <3B46E116 DOT 20508 DOT C8E5ACB AT localhost> <20010707095422 DOT C7298 AT redhat DOT com> <3B499BF7 DOT 6D8FCABC AT hplb DOT hpl DOT hp DOT com> <20010709222226 DOT A16128 AT cygbert DOT vinschen DOT de> <3B6960FA DOT 8099DD72 AT hplb DOT hpl DOT hp DOT com> <3B6A943A DOT 10E925C8 AT hplb DOT hpl DOT hp DOT com> <20010803190741 DOT Z23782 AT cygbert DOT vinschen DOT de>

Is it a bug or a feature?

Internally cygwin uses a flag OLD_O_NDELAY with the value 0x0004. This
is used for backward compatibility (according to the comment). There is
code to check that if either the OLD_O_NDELAY flag is set or if O_NDELAY
(0x4000) is set they both get set.

So when rsync does a GETFL it does the 'normal':- val &= ~NONBLOCK_FLAG
to set to blocking. Unfortunately the OLD_O_NDELAY bit is still set so
the when the SETFL is called is sets the O_FNDELAY bit as well.
Obviously this means that once a socket is set to non-blocking mode it
cannot be reset using this method. Note that the OLD_O_NDELAY is not
defined in the installed header files, only internally to cygwin.

I think that it is not possible to run old executables with newer DLLs,
so may be the OLD_O_NDELAY flag can be removed.

I added this patch to rsync.h

470a471,474
> #ifdef __CYGWIN32__
> #define OLD_O_NDELAY 0x0004
> #define NONBLOCK_FLAG (O_NONBLOCK | OLD_O_NDELAY)
> #else
476a481
> #endif

This fixes the problem for rsync.

bill

--
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple
Bug reporting:         http://cygwin.com/bugs.html
Documentation:         http://cygwin.com/docs.html
FAQ:                   http://cygwin.com/faq/

- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019