delorie.com/archives/browse.cgi   search  
Mail Archives: cygwin/2009/08/20/07:20:44

X-Recipient: archive-cygwin AT delorie DOT com
X-Spam-Check-By: sourceware.org
Date: Thu, 20 Aug 2009 13:19:55 +0200
From: Corinna Vinschen <corinna-cygwin AT cygwin DOT com>
To: cygwin AT cygwin DOT com
Subject: Re: find(1) memory leak in cygheap
Message-ID: <20090820111955.GP32408@calimero.vinschen.de>
Reply-To: cygwin AT cygwin DOT com
Mail-Followup-To: cygwin AT cygwin DOT com
References: <c8a3efee0908190447l11062bf1waba8ca9df5581468 AT mail DOT gmail DOT com> <20090819140322 DOT GB8713 AT ednor DOT casa DOT cgf DOT cx> <c8a3efee0908190804i4130ecbfp7561934ab2272da8 AT mail DOT gmail DOT com> <c8a3efee0908192309k4e207b4fs662d2c2baae8c0a2 AT mail DOT gmail DOT com> <20090820083926 DOT GJ32408 AT calimero DOT vinschen DOT de> <c8a3efee0908200323v6ffc605cuc74b45533bf99048 AT mail DOT gmail DOT com>
MIME-Version: 1.0
In-Reply-To: <c8a3efee0908200323v6ffc605cuc74b45533bf99048@mail.gmail.com>
User-Agent: Mutt/1.5.19 (2009-02-20)
Mailing-List: contact cygwin-help AT cygwin DOT com; run by ezmlm
List-Id: <cygwin.cygwin.com>
List-Unsubscribe: <mailto:cygwin-unsubscribe-archive-cygwin=delorie DOT com AT cygwin DOT com>
List-Subscribe: <mailto:cygwin-subscribe AT cygwin DOT com>
List-Archive: <http://sourceware.org/ml/cygwin/>
List-Post: <mailto:cygwin AT cygwin DOT com>
List-Help: <mailto:cygwin-help AT cygwin DOT com>, <http://sourceware.org/ml/#faqs>
Sender: cygwin-owner AT cygwin DOT com
Mail-Followup-To: cygwin AT cygwin DOT com
Delivered-To: mailing list cygwin AT cygwin DOT com

On Aug 20 18:23, Haojun Bao wrote:
> On Thu, Aug 20, 2009 at 4:39 PM, Corinna
> Vinschen<corinna-cygwin AT cygwin DOT com> wrote:
> > On Aug 20 14:09, Haojun Bao wrote:
> >> I have done some debugging, and the culprit should be dup(2) syscall.
> >> Here's another test case, this time written in C.
> >>
> >> Note that the cygheap_start and cygheap_max value will be very likely
> >> different on your computer, so you should use gdb to take a peek into
> >> cygwin1.dll to get your value. Or else you should remove the reference
> >> to these memory location.
> >>
> >> The test case will show cygheap is always growing, and at the end it will print
> >>   1 [main] a 3560 Q:\a.exe: *** fatal error - cmalloc would have returned NULL
> >
> > Thanks for the testcase!  It was pretty easy to find the culprit with
> > it.  Deep in dup(), the strings for the filenames of the new file
> > descriptor were allocated twice.  While I was at it, I also found two
> > other potential memory leaks, which would just show up much less
> > frequent.
> >
> > This fixes your find testcase as well, and probably (hopefully?) also
> > the problem reported in http://cygwin.com/ml/cygwin/2009-08/msg00620.html
> >
> > I applied a patch to CVS and will upload a -60 release asap.
> >
> >
> > Thanks again,
> > Corinna
> >
> Great. In fact, I also found this code myself might cause problem in path.h:
> (we should test if path is NULL, and free it before the memcpy, and
> other member pointers should also be checked and free-ed first, is it
> about right?:-)

Yes and no.  It might look cleaner to free the pointers at this point
if they are non-NULL, but in fact the operator= is called after the
path_conv content has been memcpy'ed to another fhandler.  So, if you
free the pointers, you free the pointers of another file descriptor.
SEGV's galore!


Corinna

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

--
Problem reports:       http://cygwin.com/problems.html
FAQ:                   http://cygwin.com/faq/
Documentation:         http://cygwin.com/docs.html
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple

- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019