diff options
| -rw-r--r-- | compiler/driver/compiler_driver.cc | 22 | ||||
| -rw-r--r-- | compiler/driver/compiler_driver.h | 13 |
2 files changed, 19 insertions, 16 deletions
diff --git a/compiler/driver/compiler_driver.cc b/compiler/driver/compiler_driver.cc index be149af82a..22e35ad634 100644 --- a/compiler/driver/compiler_driver.cc +++ b/compiler/driver/compiler_driver.cc @@ -357,7 +357,7 @@ CompilerDriver::CompilerDriver( compiler_kind_(compiler_kind), instruction_set_(instruction_set), instruction_set_features_(instruction_set_features), - freezing_constructor_lock_("freezing constructor lock"), + no_barrier_constructor_classes_lock_("freezing constructor lock"), compiled_classes_lock_("compiled classes lock"), compiled_methods_lock_("compiled method lock"), compiled_methods_(MethodTable::key_compare()), @@ -2110,8 +2110,8 @@ class ResolveClassFieldsAndMethodsVisitor : public CompilationVisitor { DCHECK(!it.HasNext()); } } - if (requires_constructor_barrier) { - manager_->GetCompiler()->AddRequiresConstructorBarrier(self, &dex_file, class_def_index); + if (!requires_constructor_barrier) { + manager_->GetCompiler()->AddRequiresNoConstructorBarrier(self, &dex_file, class_def_index); } } @@ -2769,16 +2769,18 @@ size_t CompilerDriver::GetNonRelativeLinkerPatchCount() const { return non_relative_linker_patch_count_; } -void CompilerDriver::AddRequiresConstructorBarrier(Thread* self, const DexFile* dex_file, - uint16_t class_def_index) { - WriterMutexLock mu(self, freezing_constructor_lock_); - freezing_constructor_classes_.insert(ClassReference(dex_file, class_def_index)); +void CompilerDriver::AddRequiresNoConstructorBarrier(Thread* self, + const DexFile* dex_file, + uint16_t class_def_index) { + WriterMutexLock mu(self, no_barrier_constructor_classes_lock_); + no_barrier_constructor_classes_.insert(ClassReference(dex_file, class_def_index)); } -bool CompilerDriver::RequiresConstructorBarrier(Thread* self, const DexFile* dex_file, +bool CompilerDriver::RequiresConstructorBarrier(Thread* self, + const DexFile* dex_file, uint16_t class_def_index) const { - ReaderMutexLock mu(self, freezing_constructor_lock_); - return freezing_constructor_classes_.count(ClassReference(dex_file, class_def_index)) != 0; + ReaderMutexLock mu(self, no_barrier_constructor_classes_lock_); + return no_barrier_constructor_classes_.count(ClassReference(dex_file, class_def_index)) == 0; } std::string CompilerDriver::GetMemoryUsageString(bool extended) const { diff --git a/compiler/driver/compiler_driver.h b/compiler/driver/compiler_driver.h index 64a06a2f83..98e3d890cd 100644 --- a/compiler/driver/compiler_driver.h +++ b/compiler/driver/compiler_driver.h @@ -183,12 +183,12 @@ class CompilerDriver { // Remove and delete a compiled method. void RemoveCompiledMethod(const MethodReference& method_ref) REQUIRES(!compiled_methods_lock_); - void AddRequiresConstructorBarrier(Thread* self, const DexFile* dex_file, + void AddRequiresNoConstructorBarrier(Thread* self, const DexFile* dex_file, uint16_t class_def_index) - REQUIRES(!freezing_constructor_lock_); + REQUIRES(!no_barrier_constructor_classes_lock_); bool RequiresConstructorBarrier(Thread* self, const DexFile* dex_file, uint16_t class_def_index) const - REQUIRES(!freezing_constructor_lock_); + REQUIRES(!no_barrier_constructor_classes_lock_); // Callbacks from compiler to see what runtime checks must be generated. @@ -629,9 +629,10 @@ class CompilerDriver { const InstructionSet instruction_set_; const InstructionSetFeatures* const instruction_set_features_; - // All class references that require - mutable ReaderWriterMutex freezing_constructor_lock_ DEFAULT_MUTEX_ACQUIRED_AFTER; - std::set<ClassReference> freezing_constructor_classes_ GUARDED_BY(freezing_constructor_lock_); + // All class references that do not require constructor barriers + mutable ReaderWriterMutex no_barrier_constructor_classes_lock_ DEFAULT_MUTEX_ACQUIRED_AFTER; + std::set<ClassReference> no_barrier_constructor_classes_ + GUARDED_BY(no_barrier_constructor_classes_lock_); typedef SafeMap<const ClassReference, CompiledClass*> ClassTable; // All class references that this compiler has compiled. |