forked from Imagelibrary/binutils-gdb
* archive.cc (Lib_group::add_symbols): Lock object before deleting its
symbols data. (Lib_group::include_member): Unlock object after deleting its symbols data. * testsuite/start_lib_test_3.c: Remove all global symbols to trigger the bug fixed here.
This commit is contained in:
@@ -1,3 +1,12 @@
|
||||
2010-08-23 Cary Coutant <ccoutant@google.com>
|
||||
|
||||
* archive.cc (Lib_group::add_symbols): Lock object before deleting its
|
||||
symbols data.
|
||||
(Lib_group::include_member): Unlock object after deleting its
|
||||
symbols data.
|
||||
* testsuite/start_lib_test_3.c: Remove all global symbols to trigger
|
||||
the bug fixed here.
|
||||
|
||||
2010-08-19 Neil Vachharajani <nvachhar@google.com>
|
||||
Cary Coutant <ccoutant@google.com>
|
||||
|
||||
|
||||
@@ -1057,7 +1057,14 @@ Lib_group::add_symbols(Symbol_table* symtab, Layout* layout,
|
||||
else
|
||||
{
|
||||
if (member.sd_ != NULL)
|
||||
delete member.sd_;
|
||||
{
|
||||
// The file must be locked in order to destroy the views
|
||||
// associated with it.
|
||||
gold_assert(obj != NULL);
|
||||
obj->lock(this->task_);
|
||||
delete member.sd_;
|
||||
obj->unlock(this->task_);
|
||||
}
|
||||
}
|
||||
|
||||
this->members_[i] = this->members_.back();
|
||||
@@ -1096,10 +1103,10 @@ Lib_group::include_member(Symbol_table* symtab, Layout* layout,
|
||||
layout->incremental_inputs()->report_object(obj, NULL);
|
||||
obj->layout(symtab, layout, sd);
|
||||
obj->add_symbols(symtab, sd, layout);
|
||||
// Unlock the file for the next task.
|
||||
obj->unlock(this->task_);
|
||||
}
|
||||
delete sd;
|
||||
// Unlock the file for the next task.
|
||||
obj->unlock(this->task_);
|
||||
}
|
||||
|
||||
// Print statistical information to stderr. This is used for --stats.
|
||||
|
||||
@@ -22,9 +22,4 @@
|
||||
|
||||
This is a test of the --start-lib and --end-lib options. */
|
||||
|
||||
extern void t3 (void);
|
||||
|
||||
void
|
||||
t3 (void)
|
||||
{
|
||||
}
|
||||
static char t3[] = "t3";
|
||||
|
||||
Reference in New Issue
Block a user