From 93ceb76464b573cae4b2f94d3dd36665b3174628 Mon Sep 17 00:00:00 2001 From: Ian Lance Taylor Date: Fri, 12 Feb 2010 04:33:53 +0000 Subject: * gold.cc (queue_middle_gc_tasks): Use a separate blocker for each Read_relocs task. (queue_middle_tasks): Likewise, and also for Scan_relocs. Run Allocate_commons_task first. * reloc.cc (Read_relocs::run): Pass next_blocker_ down to next task, rather than symtab_lock_. (Gc_process_relocs::~Gc_process_relocs): New function. (Gc_process_relocs::is_runnable): Check this_blocker_. (Gc_process_relocs::locks): Use next_blocker_ rather than blocker_. (Scan_relocs::~Scan_relocs): New function. (Scan_relocs::is_runnable): Check this_blocker_ rather than symtab_lock_. (Scan_relocs::locks): Drop symtab_lock_ and blocker_. Add next_blocker_. * reloc.h (class Read_relocs): Drop symtab_lock_ and blocker_ fields. Add this_blocker_ and next_blocker_ fields. Adjust constructor accordingly. (class Gc_process_relocs): Likewise. (class Scan_relocs): Likewise. * common.h (class Allocate_commons_task): Remove symtab_lock_ field, and corresponding constructor parameter. * common.cc (Allocate_commons_tasK::is_runnable): Remove use of symtab_lock_. (Allocate_commons_task::locks): Likewise. --- gold/common.cc | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) (limited to 'gold/common.cc') diff --git a/gold/common.cc b/gold/common.cc index 8859338..8346c0b 100644 --- a/gold/common.cc +++ b/gold/common.cc @@ -1,6 +1,6 @@ // common.cc -- handle common symbols for gold -// Copyright 2006, 2007, 2008 Free Software Foundation, Inc. +// Copyright 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. // Written by Ian Lance Taylor . // This file is part of gold. @@ -36,24 +36,21 @@ namespace gold // Allocate_commons_task methods. -// This task allocates the common symbols. We need a lock on the -// symbol table. +// This task allocates the common symbols. We arrange to run it +// before anything else which needs to access the symbol table. Task_token* Allocate_commons_task::is_runnable() { - if (!this->symtab_lock_->is_writable()) - return this->symtab_lock_; return NULL; } -// Return the locks we hold: one on the symbol table, and one blocker. +// Release a blocker. void Allocate_commons_task::locks(Task_locker* tl) { tl->add(this, this->blocker_); - tl->add(this, this->symtab_lock_); } // Allocate the common symbols. -- cgit v1.1