From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 16500 invoked by alias); 14 Dec 2012 10:26:08 -0000 Received: (qmail 16490 invoked by uid 22791); 14 Dec 2012 10:26:07 -0000 X-SWARE-Spam-Status: No, hits=-1.8 required=5.0 tests=AWL,BAYES_00,KHOP_THREADED,MSGID_MULTIPLE_AT,TW_QX X-Spam-Check-By: sourceware.org Received: from mailhost.u-strasbg.fr (HELO mailhost.u-strasbg.fr) (130.79.200.157) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Fri, 14 Dec 2012 10:26:02 +0000 Received: from md13.u-strasbg.fr (md13.u-strasbg.fr [130.79.200.248]) by mailhost.u-strasbg.fr (8.14.3/jtpda-5.5pre1) with ESMTP id qBEAPumi056403 ; Fri, 14 Dec 2012 11:25:57 +0100 (CET) (envelope-from pierre.muller@ics-cnrs.unistra.fr) Received: from mailserver.u-strasbg.fr (ms13.u-strasbg.fr [130.79.204.113]) by md13.u-strasbg.fr (8.14.3/jtpda-5.5pre1) with ESMTP id qBEAPuEo026810 ; Fri, 14 Dec 2012 11:25:56 +0100 (envelope-from pierre.muller@ics-cnrs.unistra.fr) Received: from E6510Muller (gw-ics.u-strasbg.fr [130.79.210.225]) (user=mullerp mech=LOGIN) by mailserver.u-strasbg.fr (8.14.3/jtpda-5.5pre1) with ESMTP id qBEAPtJo011216 (version=TLSv1/SSLv3 cipher=AES128-SHA bits=128 verify=NO) ; Fri, 14 Dec 2012 11:25:55 +0100 (envelope-from pierre.muller@ics-cnrs.unistra.fr) From: "Pierre Muller" To: "'Pedro Alves'" Cc: References: <50c9b7e6.25f2440a.3810.3771SMTPIN_ADDED_BROKEN@mx.google.com> <50CA3784.2030706@redhat.com> <000301cdd9d0$0db345d0$2919d170$@muller@ics-cnrs.unistra.fr> <50CAF521.3040307@redhat.com> In-Reply-To: <50CAF521.3040307@redhat.com> Subject: [RFA] Fix other memory leak in solib_target_current_sos Date: Fri, 14 Dec 2012 10:26:00 -0000 Message-ID: <000001cdd9e5$6868f6e0$393ae4a0$@muller@ics-cnrs.unistra.fr> MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2012-12/txt/msg00486.txt.bz2 > -----Message d'origine----- > De=A0: gdb-patches-owner@sourceware.org [mailto:gdb-patches- > owner@sourceware.org] De la part de Pedro Alves > Envoy=E9=A0: vendredi 14 d=E9cembre 2012 10:45 > =C0=A0: Pierre Muller > Cc=A0: gdb-patches@sourceware.org > Objet=A0: Re: [RFA] Fix memory leak in windows_xfer_shared_libraries >=20 > On 12/14/2012 07:53 AM, Pierre Muller wrote: >=20 > >>> I was also wondering if it would not be better to keep the obstack in > >>> between the two calls, but that would probably require some static > >> variable > >>> :( > >> > >> That'd be fine. We actually do that in some cases in gdbserver, like > >> handle_qxfer_threads and handle_qxfer_traceframe_info. It just didn't > >> look like worth it enough to bother when I initially wrote this. > > > > I was wondering if this would become a problem if we later add support > for > > multiple inferior > > for windows-nat >=20 > I don't think so. >=20 > > I vaguely remember that I tried to achieve this a long time ago... >=20 > ISTR you had an archer branch for that and other Windows stuff. Oh, no... I completely forgot that :( It's been a loooong time since I last worked on that :( > > > > Anyhow, the memory leak is gone at least! I found another leak, down the same line, solib_target_current_sos calls target_read_stralloc which as its name suggests allocates the result on the heap... But that string was not freed in the current code... This patch fixes that leak. 2012-12-14 Pierre Muller * solib-target.c (solib_target_current_sos): Remove 'const' qualifier from type of library_document local variable to be able to free it and avoid a memory leak. Index: src/gdb/solib-target.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D RCS file: /cvs/src/src/gdb/solib-target.c,v retrieving revision 1.24 diff -u -p -r1.24 solib-target.c --- src/gdb/solib-target.c 4 Jan 2012 08:17:11 -0000 1.24 +++ src/gdb/solib-target.c 14 Dec 2012 10:17:58 -0000 @@ -246,7 +246,7 @@ static struct so_list * solib_target_current_sos (void) { struct so_list *new_solib, *start =3D NULL, *last =3D NULL; - const char *library_document; + char *library_document; VEC(lm_info_p) *library_list; struct lm_info *info; int ix; @@ -261,7 +261,10 @@ solib_target_current_sos (void) /* Parse the list. */ library_list =3D solib_target_parse_libraries (library_document); if (library_list =3D=3D NULL) - return NULL; + { + xfree (library_document); + return NULL; + } /* Build a struct so_list for each entry on the list. */ for (ix =3D 0; VEC_iterate (lm_info_p, library_list, ix, info); ix++) @@ -291,6 +294,9 @@ solib_target_current_sos (void) /* Free the library list, but not its members. */ VEC_free (lm_info_p, library_list); + /* Also free allocated library_document string. */ + xfree (library_document); + return start; }