summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Hans Boehm <hboehm@google.com> 2021-10-29 14:57:37 -0700
committer Vladimir Marko <vmarko@google.com> 2021-11-01 09:12:47 +0000
commit808d8cc8114e0c5ee3116639fe9d31be5a70403a (patch)
treed742448258da26e44ef1bddf1ed59c24531ab2ed
parentd1729267e686f568a6c9c853ad80dceb7e7e6f0d (diff)
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
-rw-r--r--runtime/indirect_reference_table.cc2
-rw-r--r--runtime/indirect_reference_table.h2
2 files changed, 2 insertions, 2 deletions
diff --git a/runtime/indirect_reference_table.cc b/runtime/indirect_reference_table.cc
index 4a06b2f2d7..fbe678bea2 100644
--- a/runtime/indirect_reference_table.cc
+++ b/runtime/indirect_reference_table.cc
@@ -80,7 +80,7 @@ static inline MemMap NewIRTMap(size_t table_bytes, std::string* error_msg) {
}
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 34340e55de..084b534a70 100644
--- a/runtime/indirect_reference_table.h
+++ b/runtime/indirect_reference_table.h
@@ -247,7 +247,7 @@ class SmallIrtAllocator {
// 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 {