Manage objfiles with shared_ptr
This changes objfiles to be managed using a shared_ptr. shared_ptr is chosen because it enables the use of objfiles in background threads. The simplest way to do this was to introduce a new iterator that will return the underlying objfile, rather than a shared_ptr. (I also tried changing the rest of gdb to use shared_ptr, but this was quite large; and to using intrusive reference counting, but this also was tricky.) gdb/ChangeLog 2019-12-12 Tom Tromey <tom@tromey.com> * progspace.h (objfile_list): New typedef. (class unwrapping_objfile_iterator) (struct unwrapping_objfile_range): Newl (struct program_space) <objfiles_range>: Change type. <objfiles>: Change return type. <add_objfile>: Change type of "objfile" parameter. <objfiles_list>: Now a list of shared_ptr. * progspace.c (program_space::add_objfile): Change type of "objfile". Update. (program_space::remove_objfile): Update. * objfiles.h (struct objfile) <~objfile>: Make public. * objfiles.c (objfile::make): Update. (objfile::unlink): Don't call delete. Change-Id: I6fb7fbf06efb7cb7474c525908365863eae27eb3
This commit is contained in:
parent
343cc95202
commit
7d7167ce1b
5 changed files with 123 additions and 17 deletions
|
@ -486,7 +486,10 @@ objfile::make (bfd *bfd_, const char *name_, objfile_flags flags_,
|
|||
if (parent != nullptr)
|
||||
add_separate_debug_objfile (result, parent);
|
||||
|
||||
current_program_space->add_objfile (result, parent);
|
||||
/* Using std::make_shared might be a bit nicer here, but that would
|
||||
require making the constructor public. */
|
||||
current_program_space->add_objfile (std::shared_ptr<objfile> (result),
|
||||
parent);
|
||||
|
||||
/* Rebuild section map next time we need it. */
|
||||
get_objfile_pspace_data (current_program_space)->new_objfiles_available = 1;
|
||||
|
@ -500,7 +503,6 @@ void
|
|||
objfile::unlink ()
|
||||
{
|
||||
current_program_space->remove_objfile (this);
|
||||
delete this;
|
||||
}
|
||||
|
||||
/* Free all separate debug objfile of OBJFILE, but don't free OBJFILE
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue