Assign lower level to Small IRT table lock
It can be acquired after Class loader classes lock. Jvmti
GetLoadedClasses traverses classes with a visitor that may need
to allocate a LocalRef.
Bug: 184847225
Test: Build and boot AOSP
Change-Id: Ic19b2a3238321bc21440064f0d1b531ed254ea35
diff --git a/runtime/indirect_reference_table.cc b/runtime/indirect_reference_table.cc
index 4a06b2f..fbe678b 100644
--- a/runtime/indirect_reference_table.cc
+++ b/runtime/indirect_reference_table.cc
@@ -80,7 +80,7 @@
}
SmallIrtAllocator::SmallIrtAllocator()
- : small_irt_freelist_(nullptr), lock_("Small IRT table lock") {
+ : small_irt_freelist_(nullptr), lock_("Small IRT table lock", LockLevel::kGenericBottomLock) {
}
// Allocate an IRT table for kSmallIrtEntries.
diff --git a/runtime/indirect_reference_table.h b/runtime/indirect_reference_table.h
index 34340e5..084b534 100644
--- a/runtime/indirect_reference_table.h
+++ b/runtime/indirect_reference_table.h
@@ -247,7 +247,7 @@
// Repository of MemMaps used for small IRT tables.
std::vector<MemMap> shared_irt_maps_;
- Mutex lock_;
+ Mutex lock_; // Level kGenericBottomLock; acquired before mem_map_lock_, which is a C++ mutex.
};
class IndirectReferenceTable {