From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 16775 invoked by alias); 20 Nov 2001 18:09:00 -0000 Mailing-List: contact gdb-patches-help@sourceware.cygnus.com; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sources.redhat.com Received: (qmail 16754 invoked from network); 20 Nov 2001 18:08:58 -0000 Received: from unknown (HELO cygnus.com) (205.180.230.5) by sourceware.cygnus.com with SMTP; 20 Nov 2001 18:08:58 -0000 Received: from makita.cygnus.com (makita.cygnus.com [205.180.230.78]) by runyon.cygnus.com (8.8.7-cygnus/8.8.7) with ESMTP id KAA29418 for ; Tue, 20 Nov 2001 10:08:57 -0800 (PST) Received: from localhost (keiths@localhost) by makita.cygnus.com (8.8.8+Sun/8.6.4) with ESMTP id KAA20370 for ; Tue, 20 Nov 2001 10:08:57 -0800 (PST) X-Authentication-Warning: makita.cygnus.com: keiths owned process doing -bs Date: Thu, 08 Nov 2001 08:59:00 -0000 From: Keith Seitz To: Subject: Re: [RFA] varobj.c memory leaks In-Reply-To: <3BFA8F11.9DB324B8@redhat.com> Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII X-SW-Source: 2001-11/txt/msg00153.txt.bz2 On Tue, 20 Nov 2001, Fernando Nasser wrote: > Keith Seitz wrote: > > > > Hi, > > > > I was looking at c++ problems in varobj when I noticed that we had a few > > memory leaks. > > > > *_name_of_child allocates memory for the return result. The result must be > > xfreed when no longer needed. > > > > I've tested this on gdb.mi/mi-var-display.exp, gdb.mi/mi-watch.exp, > > gdb.gdbtk/c_variable.exp, and gdb.gdbtk/cpp_variable.exp, and it has no > > regressions. > > > > Keith > > > > Thanks. Please check it in. Done. Thanks for the quick response. Now on to get my C++ changes for varobj in! :-) Keith > > ChangeLog > > 2001-11-20 Keith Seitz > > > > * varobj.c (c_value_of_child): Release memory for "name" when > > finshed using it. > > (c_type_of_child): Likewise. > > (cplus_value_of_child): Isolate the use of name_of_child to > > one case that needs it. > > Release memory for "name" when finished using it. > > > > Patch > > Index: varobj.c > > =================================================================== > > RCS file: /cvs/src/src/gdb/varobj.c,v > > retrieving revision 1.24 > > diff -u -p -r1.24 varobj.c > > --- varobj.c 2001/11/19 19:44:04 1.24 > > +++ varobj.c 2001/11/20 17:03:27 > > @@ -1977,6 +1977,7 @@ c_value_of_child (struct varobj *parent, > > if (value != NULL) > > release_value (value); > > > > + xfree (name); > > return value; > > } > > > > @@ -2019,6 +2020,7 @@ c_type_of_child (struct varobj *parent, > > break; > > } > > > > + xfree (name); > > return type; > > } > > > > @@ -2281,7 +2283,6 @@ cplus_value_of_child (struct varobj *par > > { > > struct type *type; > > struct value *value; > > - char *name; > > > > if (CPLUS_FAKE_CHILD (parent)) > > type = get_type_deref (parent->parent); > > @@ -2289,19 +2290,22 @@ cplus_value_of_child (struct varobj *par > > type = get_type_deref (parent); > > > > value = NULL; > > - name = name_of_child (parent, index); > > > > if (((TYPE_CODE (type)) == TYPE_CODE_STRUCT) || > > ((TYPE_CODE (type)) == TYPE_CODE_UNION)) > > { > > if (CPLUS_FAKE_CHILD (parent)) > > { > > + char *name; > > struct value *temp = parent->parent->value; > > > > + name = name_of_child (parent, index); > > gdb_value_struct_elt (NULL, &value, &temp, NULL, name, NULL, > > "cplus_structure"); > > if (value != NULL) > > release_value (value); > > + > > + xfree (name); > > } > > else if (index >= TYPE_N_BASECLASSES (type)) > > { > > -- > Fernando Nasser > Red Hat Canada Ltd. E-Mail: fnasser@redhat.com > 2323 Yonge Street, Suite #300 > Toronto, Ontario M4P 2C9 >