summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2021-08-20 06:39:44 +0000
committerAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2021-08-20 06:39:44 +0000
commit5c93b633c1ed96c729a2b07eb7bf2719bd2ada32 (patch)
treea17694dadda88199e910060928ddea83bef9234f
parent24d11c9257737fef8cf358aeb065642d54e5b6e8 (diff)
parent440952b4586c809ef54cb6cd5e17ce70d140f8a2 (diff)
downloadart-android12-d1-s2-release.tar.gz
Merge cherrypicks of [15636132, 15634622, 15636419, 15634623, 15635081, 15636346, 15636347, 15635821, 15635822, 15635823, 15635824, 15636496, 15636421, 15635984, 15636005, 15636133, 15635225, 15635189, 15636250, 15636380, 15636422, 15636348, 15636349, 15636350, 15632848, 15636382, 15636383, 15636266, 15636351, 15636423, 15636352, 15635986, 15636220, 15636252] into sc-d1-releaseandroid-12.0.0_r7android-12.0.0_r6android-12.0.0_r5android-12.0.0_r4android-12.0.0_r15android-12.0.0_r14android-12.0.0_r13android-12.0.0_r12android12-d1-s6-releaseandroid12-d1-s5-releaseandroid12-d1-s4-releaseandroid12-d1-s3-releaseandroid12-d1-s2-releaseandroid12-d1-s1-releaseandroid12-d1-release
Change-Id: I748785ce90ad21f954c6eb1655091fa7c593dc95
-rw-r--r--runtime/class_linker.cc16
1 files changed, 5 insertions, 11 deletions
diff --git a/runtime/class_linker.cc b/runtime/class_linker.cc
index b9751ab965..8b9e42a572 100644
--- a/runtime/class_linker.cc
+++ b/runtime/class_linker.cc
@@ -9814,22 +9814,16 @@ void ClassLinker::SetEntryPointsForObsoleteMethod(ArtMethod* method) const {
}
void ClassLinker::DumpForSigQuit(std::ostream& os) {
- // Avoid a deadlock between a garbage collecting thread running a checkpoint,
- // a thread holding the dex or classlinker lock and blocking on a condition variable for
- // weak references access, and a thread blocking on the dex or classlinker lock and thus
- // unable to run the checkpoint.
- Thread* self = Thread::Current();
- ScopedObjectAccess soa(self);
- gc::ScopedGCCriticalSection gcs(self, gc::kGcCauseClassLinker, gc::kCollectorTypeClassLinker);
- ReaderMutexLock mu(self, *Locks::classlinker_classes_lock_);
+ ScopedObjectAccess soa(Thread::Current());
+ ReaderMutexLock mu(soa.Self(), *Locks::classlinker_classes_lock_);
os << "Zygote loaded classes=" << NumZygoteClasses() << " post zygote classes="
<< NumNonZygoteClasses() << "\n";
- ReaderMutexLock mu2(self, *Locks::dex_lock_);
+ ReaderMutexLock mu2(soa.Self(), *Locks::dex_lock_);
os << "Dumping registered class loaders\n";
size_t class_loader_index = 0;
for (const ClassLoaderData& class_loader : class_loaders_) {
ObjPtr<mirror::ClassLoader> loader =
- ObjPtr<mirror::ClassLoader>::DownCast(self->DecodeJObject(class_loader.weak_root));
+ ObjPtr<mirror::ClassLoader>::DownCast(soa.Self()->DecodeJObject(class_loader.weak_root));
if (loader != nullptr) {
os << "#" << class_loader_index++ << " " << loader->GetClass()->PrettyDescriptor() << ": [";
bool saw_one_dex_file = false;
@@ -9848,7 +9842,7 @@ void ClassLinker::DumpForSigQuit(std::ostream& os) {
size_t parent_index = 0;
for (const ClassLoaderData& class_loader2 : class_loaders_) {
ObjPtr<mirror::ClassLoader> loader2 = ObjPtr<mirror::ClassLoader>::DownCast(
- self->DecodeJObject(class_loader2.weak_root));
+ soa.Self()->DecodeJObject(class_loader2.weak_root));
if (loader2 == loader->GetParent()) {
os << ", parent #" << parent_index;
found_parent = true;