mirror of
https://github.com/darlinghq/darling-gdb.git
synced 2024-11-23 20:19:49 +00:00
Fix race condition when using --threads with linker plugins.
2014-11-06 Evgeniy Dushistov <dushistov@mail.ru> gold/ * plugin.cc: use lock to searialize calls of Plugin_manager::claim_file * plugin.h: add lock definition
This commit is contained in:
parent
8ee35f2ab5
commit
d37ffe2537
@ -1,3 +1,8 @@
|
||||
2014-11-06 Evgeniy Dushistov <dushistov@mail.ru>
|
||||
|
||||
* plugin.cc: use lock to searialize calls of Plugin_manager::claim_file
|
||||
* plugin.h: add lock definition
|
||||
|
||||
2014-10-29 Han Shen <shenhan@google.com>
|
||||
Jing Yu <jingyu@google.com>
|
||||
|
||||
|
@ -427,6 +427,7 @@ Plugin_manager::~Plugin_manager()
|
||||
++obj)
|
||||
delete *obj;
|
||||
this->objects_.clear();
|
||||
delete this->lock_;
|
||||
}
|
||||
|
||||
// Load all plugin libraries.
|
||||
@ -447,6 +448,10 @@ Pluginobj*
|
||||
Plugin_manager::claim_file(Input_file* input_file, off_t offset,
|
||||
off_t filesize, Object* elf_object)
|
||||
{
|
||||
bool lock_initialized = this->initialize_lock_.initialize();
|
||||
|
||||
gold_assert(lock_initialized);
|
||||
Hold_lock hl(*this->lock_);
|
||||
if (this->in_replacement_phase_)
|
||||
return NULL;
|
||||
|
||||
|
@ -134,7 +134,8 @@ class Plugin_manager
|
||||
in_claim_file_handler_(false),
|
||||
options_(options), workqueue_(NULL), task_(NULL), input_objects_(NULL),
|
||||
symtab_(NULL), layout_(NULL), dirpath_(NULL), mapfile_(NULL),
|
||||
this_blocker_(NULL), extra_search_path_()
|
||||
this_blocker_(NULL), extra_search_path_(), lock_(NULL),
|
||||
initialize_lock_(&lock_)
|
||||
{ this->current_ = plugins_.end(); }
|
||||
|
||||
~Plugin_manager();
|
||||
@ -376,6 +377,8 @@ class Plugin_manager
|
||||
// An extra directory to seach for the libraries passed by
|
||||
// add_input_library.
|
||||
std::string extra_search_path_;
|
||||
Lock* lock_;
|
||||
Initialize_lock initialize_lock_;
|
||||
};
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user