Resource Temporarily Unavailable workaround
Andrew STUBBS
andrew.stubbs@st.com
Thu Nov 22 17:55:00 GMT 2007
Christopher Faylor wrote:
> On Thu, Nov 22, 2007 at 12:00:51PM -0500, Christopher Faylor wrote:
>> On Thu, Nov 22, 2007 at 04:41:54PM +0000, Andrew STUBBS wrote:
>>> The attached patch adds a 'retry' to the fork system call. Basically
>>> it waits 10 seconds to allow the 'resource temporarily unavailable' to
>>> become (temporarily) available once more, and tries again, up to a
>>> maximum of three attempts.
>> There is already a retry in the fork and spawn system calls. This
>> technique has proved to be problematic since it can mask problems and
>> you can end up with situations where a process starts successfully but
>> cygwin thinks it fails and restarts the process again. For the exec
>> case, there is also a problem with non-cygwin .exes.
>>
>> If you look for retry in the fork call you should see where this is
>> supposed to be happening.
>
> Btw, it is likely that if you are seeing this problem that there is
> something happening after the retry code in fork which is causing an
> EAGAIN. The existing retry code could be expanded to take that into
> account if that is the case.
Thanks, now I see the retry, but the code is impossible to follow
without knowing both Cygwin and Windows backwards, and I don't have that
much time to spend on this. :(
Clearly its retries aren't (always) sufficient. Perhaps it isn't
retrying enough, or retrying the right stuff, or maybe not waiting long
enough between retries.
There is quite a lot of stuff outside the "while (1)" that I assume is
the retried code. EAGAIN is mentioned a few times, and that's without
taking into account the contents of the various function calls. In
particular there's one comment that says "Hopefully, this will succeed."
- which is reassuring.
Unfortunately the problem isn't easily reproducible. I can't use strace
as it runs way too slowly and I would just never get to the problem. I
could instrument the whole file up so that I can trace just that, and
then sit back and wait.
Any suggestions?
Andrew
More information about the Cygwin-patches
mailing list