mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2025-01-30 12:44:10 +08:00
Fix leaks of 'per program space' and 'per inferior' ada task data.
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-18 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.
This commit is contained in:
parent
a31b8bd9a0
commit
040b3e95e4
@ -1,3 +1,11 @@
|
||||
2019-02-18 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.
|
||||
|
||||
2019-02-17 Tom Tromey <tom@tromey.com>
|
||||
|
||||
* macrotab.h (macro_source_fullname): Return a std::string.
|
||||
|
@ -161,6 +161,15 @@ 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;
|
||||
xfree (data);
|
||||
}
|
||||
|
||||
/* The kind of data structure used by the runtime to store the list
|
||||
of Ada tasks. */
|
||||
|
||||
@ -285,6 +294,15 @@ 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;
|
||||
delete data;
|
||||
}
|
||||
|
||||
/* Return the task number of the task whose thread is THREAD, or zero
|
||||
if the task could not be found. */
|
||||
|
||||
@ -1414,8 +1432,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);
|
||||
|
Loading…
Reference in New Issue
Block a user