public inbox for gdb-patches@sourceware.org
 help / color / mirror / Atom feed
* [RFA] Fix leaks of 'per program space' and 'per inferior' ada task data.
@ 2019-02-17 19:50 Philippe Waroquiers
  2019-02-17 23:31 ` Tom Tromey
  0 siblings, 1 reply; 3+ messages in thread
From: Philippe Waroquiers @ 2019-02-17 19:50 UTC (permalink / raw)
  To: gdb-patches; +Cc: Philippe Waroquiers

Valgrind reports leaks such as the below.
Fix these leaks by changing ada_tasks_pspace_data_handle
and ada_tasks_inferior_data_handle to use the 'with_cleanup' register variant.

Tested on debian/amd64 natively and under Valgrind.

==26346== 56 bytes in 1 blocks are definitely lost in loss record 631 of 3,249
==26346==    at 0x4C2C4CC: operator new(unsigned long) (vg_replace_malloc.c:344)
==26346==    by 0x38F911: get_ada_tasks_inferior_data(inferior*) (ada-tasks.c:281)
==26346==    by 0x38FA3F: ada_tasks_invalidate_inferior_data (ada-tasks.c:1362)
==26346==    by 0x38FA3F: ada_tasks_new_objfile_observer(objfile*) (ada-tasks.c:1411)
==26346==    by 0x60CBC5: operator() (functional:2127)
==26346==    by 0x60CBC5: notify (observable.h:106)
==26346==    by 0x60CBC5: clear_symtab_users(enum_flags<symfile_add_flag>) (symfile.c:2903)
...

==26346== 104 bytes in 1 blocks are definitely lost in loss record 984 of 3,249
==26346==    at 0x4C2E0BC: calloc (vg_replace_malloc.c:762)
==26346==    by 0x4056F0: xcalloc (common-utils.c:84)
==26346==    by 0x38F8AE: xcnew<ada_tasks_pspace_data> (poison.h:122)
==26346==    by 0x38F8AE: get_ada_tasks_pspace_data(program_space*) (ada-tasks.c:253)
==26346==    by 0x38FA77: ada_tasks_invalidate_pspace_data (ada-tasks.c:1354)
==26346==    by 0x38FA77: ada_tasks_new_objfile_observer(objfile*) (ada-tasks.c:1394)
==26346==    by 0x60CBC5: operator() (functional:2127)
==26346==    by 0x60CBC5: notify (observable.h:106)
...

gdb/ChangeLog
2019-02-17  Philippe Waroquiers  <philippe.waroquiers@skynet.be>

	* ada-task.c (_initialize_tasks): Use 'with_cleanup' register
	variant for ada_tasks_pspace_data_handle and
	ada_tasks_inferior_data_handle.
	(ada_tasks_pspace_data_cleanup): New function.
	(ada_tasks_inferior_data_cleanup): New function.
---
 gdb/ada-tasks.c | 28 ++++++++++++++++++++++++++--
 1 file changed, 26 insertions(+), 2 deletions(-)

diff --git a/gdb/ada-tasks.c b/gdb/ada-tasks.c
index e994147a66..151fae3abb 100644
--- a/gdb/ada-tasks.c
+++ b/gdb/ada-tasks.c
@@ -161,6 +161,16 @@ struct ada_tasks_pspace_data
 /* Key to our per-program-space data.  */
 static const struct program_space_data *ada_tasks_pspace_data_handle;
 
+/* A cleanup routine for our per-program-space data.  */
+static void
+ada_tasks_pspace_data_cleanup (struct program_space *pspace, void *arg)
+{
+  struct ada_tasks_pspace_data *data
+    = (struct ada_tasks_pspace_data *) arg;
+  if (data != NULL)
+    XDELETE (data);
+}
+
 /* The kind of data structure used by the runtime to store the list
    of Ada tasks.  */
 
@@ -285,6 +295,16 @@ get_ada_tasks_inferior_data (struct inferior *inf)
   return data;
 }
 
+/* A cleanup routine for our per-inferior data.  */
+static void
+ada_tasks_inferior_data_cleanup (struct inferior *inf, void *arg)
+{
+  struct ada_tasks_inferior_data *data
+    = (struct ada_tasks_inferior_data *) arg;
+  if (data != NULL)
+    delete data;
+}
+
 /* Return the task number of the task whose thread is THREAD, or zero
    if the task could not be found.  */
 
@@ -1414,8 +1434,12 @@ ada_tasks_new_objfile_observer (struct objfile *objfile)
 void
 _initialize_tasks (void)
 {
-  ada_tasks_pspace_data_handle = register_program_space_data ();
-  ada_tasks_inferior_data_handle = register_inferior_data ();
+  ada_tasks_pspace_data_handle
+    = register_program_space_data_with_cleanup (NULL,
+						ada_tasks_pspace_data_cleanup);
+  ada_tasks_inferior_data_handle
+    = register_inferior_data_with_cleanup (NULL,
+					   ada_tasks_inferior_data_cleanup);
 
   /* Attach various observers.  */
   gdb::observers::normal_stop.attach (ada_tasks_normal_stop_observer);
-- 
2.20.1

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [RFA] Fix leaks of 'per program space' and 'per inferior' ada task data.
  2019-02-17 19:50 [RFA] Fix leaks of 'per program space' and 'per inferior' ada task data Philippe Waroquiers
@ 2019-02-17 23:31 ` Tom Tromey
  2019-02-18 21:36   ` Philippe Waroquiers
  0 siblings, 1 reply; 3+ messages in thread
From: Tom Tromey @ 2019-02-17 23:31 UTC (permalink / raw)
  To: Philippe Waroquiers; +Cc: gdb-patches

>>>>> "Philippe" == Philippe Waroquiers <philippe.waroquiers@skynet.be> writes:

Philippe> +  if (data != NULL)
Philippe> +    XDELETE (data);

gdb normally uses "xfree" and not XDELETE.
Also the NULL check isn't needed.

Philippe> +  if (data != NULL)
Philippe> +    delete data;

You don't need the NULL check here either.

This is ok with these changes.  Thank you for the patch.

Tom

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [RFA] Fix leaks of 'per program space' and 'per inferior' ada task data.
  2019-02-17 23:31 ` Tom Tromey
@ 2019-02-18 21:36   ` Philippe Waroquiers
  0 siblings, 0 replies; 3+ messages in thread
From: Philippe Waroquiers @ 2019-02-18 21:36 UTC (permalink / raw)
  To: Tom Tromey; +Cc: gdb-patches

On Sun, 2019-02-17 at 16:27 -0700, Tom Tromey wrote:
> > > > > > "Philippe" == Philippe Waroquiers <philippe.waroquiers@skynet.be> writes:
> 
> Philippe> +  if (data != NULL)
> Philippe> +    XDELETE (data);
> 
> gdb normally uses "xfree" and not XDELETE.
> Also the NULL check isn't needed.
> 
> Philippe> +  if (data != NULL)
> Philippe> +    delete data;
> 
> You don't need the NULL check here either.
> 
> This is ok with these changes.  Thank you for the patch.
Thanks for the review, pushed after having done the above fixes.

Philippe

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2019-02-18 21:36 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-02-17 19:50 [RFA] Fix leaks of 'per program space' and 'per inferior' ada task data Philippe Waroquiers
2019-02-17 23:31 ` Tom Tromey
2019-02-18 21:36   ` Philippe Waroquiers

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).