Merge cherrypicks of [15617994, 15618969, 15618970, 15617995, 15618032, 15618033, 15618190, 15620097, 15618565, 15620098, 15617967, 15619902, 15620257, 15619392] into sc-release

Change-Id: I83148b540f5dfc87b3c7a9a2249f677e4bbc99fe
diff --git a/runtime/class_linker.cc b/runtime/class_linker.cc
index b9751ab..8b9e42a 100644
--- a/runtime/class_linker.cc
+++ b/runtime/class_linker.cc
@@ -9814,22 +9814,16 @@
 }
 
 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 @@
         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;