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: 1.7.8: write fails with EAGAIN

On Mar  5 21:12, Robert Wruck wrote:
> Hi,
> recently, I found that cygwin-git was not able to 'cat-file' files
> that exceeded some size (in my case about 80MB).
> I tracked this down to the cygwin implementation of write() that
> behaves quite odd in some cases.
> I wrote a small program (source attached) that mmaps a given file
> and tries to write it to another file or stdout.
> The results vary:
> If the destination is a file (`writetest infile outfile` or
> `writetest infile > outfile`), the write succeeds in a single call.
> If the destination is a pipe (`writetest infile | cat > outfile`),
> the write succeeds in most cases. BUT:
> Under WinXP (XP Service Pack 2, 32bit), the call returns -1 and
> errno=EAGAIN. Nevertheless, SOME data is written to the pipe (in my
> case 4096 byte for each call).
> This breaks git since it does an infinite loop while errno=EAGAIN.

Hang on, you are saying that a *blocking* write(2) to a pipe returns
with EAGAIN?  Are you sure?  It would be quite a surprise if git would
actually do that.  EAGAIN is only an expected error for non-blocking
I/O, so applications which use blocking I/O usually only test for EINTR.

Where you able to reproduce the issue with the testcase you attached to
your mail?  If so, you forgot to add a hint how to use it and an example
of the expected outcome.  That would be quite helpful.

> Any ideas where to investigate further? EAGAIN is set for example in
>, fhandler_base_overlapped::has_ongoing_io but I don't
> know whether that function is involved in my case.

It is.  The overlapped io stuff is only used for pipes and fifos right


Corinna Vinschen                  Please, send mails regarding Cygwin to
Cygwin Project Co-Leader          cygwin AT cygwin DOT com
Red Hat

Problem reports:
Unsubscribe info:

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