This is the mail archive of the cygwin-developers@cygwin.com 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]

Re: Figured out how to reproduce vfork/rsync bug! (proposed fix)


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?

cgf

Index: fhandler_socket.cc
===================================================================
RCS file: /cvs/uberbaum/winsup/cygwin/fhandler_socket.cc,v
retrieving revision 1.19
retrieving revision 1.20
diff -p -r1.19 -r1.20
*** fhandler_socket.cc	2001/09/06 04:41:59	1.19
--- fhandler_socket.cc	2001/09/07 00:07:49	1.20
*************** fhandler_socket::fhandler_socket (const 
*** 45,51 ****
  {
    set_cb (sizeof *this);
    set_need_fork_fixup ();
!   prot_info_ptr = (LPWSAPROTOCOL_INFOA) cmalloc (HEAP_BUF,
  					         sizeof (WSAPROTOCOL_INFOA));
  }
  
--- 45,51 ----
  {
    set_cb (sizeof *this);
    set_need_fork_fixup ();
!   prot_info_ptr = (LPWSAPROTOCOL_INFOA) ccalloc (HEAP_BUF, 1,
  					         sizeof (WSAPROTOCOL_INFOA));
  }
  


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