Figured out how to reproduce vfork/rsync bug! (proposed fix)
Corinna Vinschen
vinschen@redhat.com
Fri Sep 7 04:19:00 GMT 2001
On Thu, Sep 06, 2001 at 09:04:58PM -0400, Christopher Faylor wrote:
> On Thu, Sep 06, 2001 at 04:13:43PM -0400, Christopher Faylor wrote:
> >On Thu, Sep 06, 2001 at 02:53:26PM -0400, Jonathan Kamens wrote:
> >>I think I'll try the patch that cgf just sent out and see if it makes
> >>this problem go away.
> >>
> >>It will be very amusing if we discover that the bug I'm encountering
> >>is the same as Egor's.
> >
> >Try this.
>
> I think this is the actual fix. I noticed this about four hours ago but
> concluded that there just HAD to be something wrong with the cygheap
> stuff since that is what I had previously been working on.
>
> I believe that cygheap was not the problem in this case. What is actually
> happening is that the it is assumed prot_info_ptr is a zero filled array --
> that is not the case when you set that long environment variable. The
> environment variable space was freed and then reused by the cmalloc
> in fhandler_socket::fhandler_socket. So, when you look at the buffer
> it actually contains the contents of the environment variable. That is
> acceptable behavior for cmalloc, of course but it looks like the
> subsequent code in fhandler_socket.cc needs assumes that this buffer
> is zeroed.
>
> Anyway, I checked in the fix below. It seems to resolve the problems.
> On further investigation, my previous fix was bogus. It just resulted
> in never freeing space for the cygwin environment, which is incorrect.
>
> Jonathan, Corinna, could you try the CVS version of cygwin and see
> if it fixes the problem?
It seems to fix it. I'm mildly surprised, though. prot_info_ptr is
used twice, first in `fixup_before_fork_exec' where it's getting
it's content and then in `fixup_after_fork' where it's content is
used to create the new socket handle.
If it's actually _used_ before being _set_ that would mean,
`fixup_after_fork' has been called w/o calling `fixup_before_fork_exec'
first. But that would be simply wrong.
So the only other explanation would be that `WSADuplicateSocketA'
needs a zero filled buffer on input?!?
Corinna
--
Corinna Vinschen Please, send mails regarding Cygwin to
Cygwin Developer mailto:cygwin@cygwin.com
Red Hat, Inc.
More information about the Cygwin-developers
mailing list