Revert "Revert "Change RequiresConstructorBarrier default to yes""
This reverts commit 0436ee6bd33a0b905cd2a7e333f7935da1bd5d86.
diff --git a/compiler/driver/compiler_driver.cc b/compiler/driver/compiler_driver.cc
index be149af..22e35ad 100644
--- a/compiler/driver/compiler_driver.cc
+++ b/compiler/driver/compiler_driver.cc
@@ -357,7 +357,7 @@
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 @@
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 @@
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 64a06a2..98e3d89 100644
--- a/compiler/driver/compiler_driver.h
+++ b/compiler/driver/compiler_driver.h
@@ -183,12 +183,12 @@
// 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 @@
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.