From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 850 invoked by alias); 20 Nov 2001 17:13:49 -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 781 invoked from network); 20 Nov 2001 17:13:44 -0000 Received: from unknown (HELO cygnus.com) (205.180.230.5) by sourceware.cygnus.com with SMTP; 20 Nov 2001 17:13:44 -0000 Received: from redhat.com (rtl.cygnus.com [205.180.230.21]) by runyon.cygnus.com (8.8.7-cygnus/8.8.7) with ESMTP id JAA24383; Tue, 20 Nov 2001 09:13:41 -0800 (PST) Message-ID: <3BFA8F11.9DB324B8@redhat.com> Date: Thu, 08 Nov 2001 08:10:00 -0000 From: Fernando Nasser Organization: Red Hat Canada X-Mailer: Mozilla 4.77 [en] (X11; U; Linux 2.4.3-12 i686) X-Accept-Language: en MIME-Version: 1.0 To: Keith Seitz CC: gdb-patches@sources.redhat.com Subject: Re: [RFA] varobj.c memory leaks References: Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit X-SW-Source: 2001-11/txt/msg00152.txt.bz2 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. F. > 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