This is the mail archive of the
mailing list for the Cygwin project.
Re: 1.7.8: write fails with EAGAIN
- From: Corinna Vinschen <corinna-cygwin at cygwin dot com>
- To: cygwin at cygwin dot com
- Cc: Robert Wruck <wruck at tweerlei dot de>
- Date: Mon, 7 Mar 2011 11:39:51 +0100
- Subject: Re: 1.7.8: write fails with EAGAIN
- References: <4D72992D.email@example.com>
- Reply-to: cygwin at cygwin dot com
On Mar 5 21:12, Robert Wruck wrote:
> 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.cc, 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
Problem reports: http://cygwin.com/problems.html
Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple