Switch JNI globals lock to reader-writer.
Also, verifier rejected classes lock. These locks show as contended during
dex2oat, however, they're commonly only read access is required.
Change-Id: If8bb834cc69cd8c26494c87fb7f7b20d4e41cdfd
diff --git a/runtime/verifier/method_verifier.cc b/runtime/verifier/method_verifier.cc
index 4d2f36f..34a0f73 100644
--- a/runtime/verifier/method_verifier.cc
+++ b/runtime/verifier/method_verifier.cc
@@ -4202,7 +4202,7 @@
ReaderWriterMutex* MethodVerifier::devirt_maps_lock_ = NULL;
MethodVerifier::DevirtualizationMapTable* MethodVerifier::devirt_maps_ = NULL;
-Mutex* MethodVerifier::rejected_classes_lock_ = NULL;
+ReaderWriterMutex* MethodVerifier::rejected_classes_lock_ = NULL;
MethodVerifier::RejectedClassesTable* MethodVerifier::rejected_classes_ = NULL;
void MethodVerifier::Init() {
@@ -4227,9 +4227,9 @@
devirt_maps_ = new MethodVerifier::DevirtualizationMapTable();
}
- rejected_classes_lock_ = new Mutex("verifier rejected classes lock");
+ rejected_classes_lock_ = new ReaderWriterMutex("verifier rejected classes lock");
{
- MutexLock mu(self, *rejected_classes_lock_);
+ WriterMutexLock mu(self, *rejected_classes_lock_);
rejected_classes_ = new MethodVerifier::RejectedClassesTable;
}
}
@@ -4267,7 +4267,7 @@
devirt_maps_lock_ = NULL;
{
- MutexLock mu(self, *rejected_classes_lock_);
+ WriterMutexLock mu(self, *rejected_classes_lock_);
delete rejected_classes_;
rejected_classes_ = NULL;
}
@@ -4280,7 +4280,7 @@
void MethodVerifier::AddRejectedClass(ClassReference ref) {
DCHECK(Runtime::Current()->IsCompiler());
{
- MutexLock mu(Thread::Current(), *rejected_classes_lock_);
+ WriterMutexLock mu(Thread::Current(), *rejected_classes_lock_);
rejected_classes_->insert(ref);
}
CHECK(IsClassRejected(ref));
@@ -4288,7 +4288,7 @@
bool MethodVerifier::IsClassRejected(ClassReference ref) {
DCHECK(Runtime::Current()->IsCompiler());
- MutexLock mu(Thread::Current(), *rejected_classes_lock_);
+ ReaderMutexLock mu(Thread::Current(), *rejected_classes_lock_);
return (rejected_classes_->find(ref) != rejected_classes_->end());
}