diff options
Diffstat (limited to 'compiler')
| -rw-r--r-- | compiler/driver/compiler_driver.cc | 9 | ||||
| -rw-r--r-- | compiler/elf_patcher.cc | 5 | ||||
| -rw-r--r-- | compiler/image_writer.cc | 8 |
3 files changed, 6 insertions, 16 deletions
diff --git a/compiler/driver/compiler_driver.cc b/compiler/driver/compiler_driver.cc index d743f907a3..990c1c87cf 100644 --- a/compiler/driver/compiler_driver.cc +++ b/compiler/driver/compiler_driver.cc @@ -795,14 +795,11 @@ void CompilerDriver::UpdateImageClasses(TimingLogger* timings) { if (IsImage()) { TimingLogger::ScopedTiming t("UpdateImageClasses", timings); // Update image_classes_ with classes for objects created by <clinit> methods. - Thread* self = Thread::Current(); - const char* old_cause = self->StartAssertNoThreadSuspension("ImageWriter"); gc::Heap* heap = Runtime::Current()->GetHeap(); // TODO: Image spaces only? ScopedObjectAccess soa(Thread::Current()); - WriterMutexLock mu(self, *Locks::heap_bitmap_lock_); + WriterMutexLock mu(soa.Self(), *Locks::heap_bitmap_lock_); heap->VisitObjects(FindClinitImageClassesCallback, this); - self->EndAssertNoThreadSuspension(old_cause); } } @@ -1872,7 +1869,8 @@ static void InitializeClass(const ParallelCompilationManager* manager, size_t cl // TODO we detach transaction from runtime to indicate we quit the transactional // mode which prevents the GC from visiting objects modified during the transaction. // Ensure GC is not run so don't access freed objects when aborting transaction. - const char* old_casue = soa.Self()->StartAssertNoThreadSuspension("Transaction end"); + + ScopedAssertNoThreadSuspension ants(soa.Self(), "Transaction end"); runtime->ExitTransactionMode(); if (!success) { @@ -1885,7 +1883,6 @@ static void InitializeClass(const ParallelCompilationManager* manager, size_t cl transaction.Abort(); CHECK_EQ(old_status, klass->GetStatus()) << "Previous class status not restored"; } - soa.Self()->EndAssertNoThreadSuspension(old_casue); } } soa.Self()->AssertNoPendingException(); diff --git a/compiler/elf_patcher.cc b/compiler/elf_patcher.cc index 92eb4d8955..0646b75f37 100644 --- a/compiler/elf_patcher.cc +++ b/compiler/elf_patcher.cc @@ -188,9 +188,8 @@ bool ElfPatcher::PatchElf() { compiler_driver_->GetMethodsToPatch().size() + compiler_driver_->GetClassesToPatch().size()); } - Thread* self = Thread::Current(); ClassLinker* class_linker = Runtime::Current()->GetClassLinker(); - const char* old_cause = self->StartAssertNoThreadSuspension("ElfPatcher"); + ScopedAssertNoThreadSuspension ants(Thread::Current(), "ElfPatcher"); typedef std::vector<const CompilerDriver::CallPatchInformation*> CallPatches; const CallPatches& code_to_patch = compiler_driver_->GetCodeToPatch(); @@ -259,8 +258,6 @@ bool ElfPatcher::PatchElf() { SetPatchLocation(patch, PointerToLowMemUInt32(get_image_address_(cb_data_, target))); } - self->EndAssertNoThreadSuspension(old_cause); - if (write_patches_) { return WriteOutPatchData(); } diff --git a/compiler/image_writer.cc b/compiler/image_writer.cc index 9c9cdf2700..c08d3bdf8b 100644 --- a/compiler/image_writer.cc +++ b/compiler/image_writer.cc @@ -543,11 +543,9 @@ void ImageWriter::CalculateNewObjectOffsets(size_t oat_loaded_size, size_t oat_d { WriterMutexLock mu(self, *Locks::heap_bitmap_lock_); // TODO: Image spaces only? - const char* old = self->StartAssertNoThreadSuspension("ImageWriter"); DCHECK_LT(image_end_, image_->Size()); // Clear any pre-existing monitors which may have been in the monitor words. heap->VisitObjects(WalkFieldsCallback, this); - self->EndAssertNoThreadSuspension(old); } const byte* oat_file_begin = image_begin_ + RoundUp(image_end_, kPageSize); @@ -577,20 +575,18 @@ void ImageWriter::CalculateNewObjectOffsets(size_t oat_loaded_size, size_t oat_d void ImageWriter::CopyAndFixupObjects() SHARED_LOCKS_REQUIRED(Locks::mutator_lock_) { - Thread* self = Thread::Current(); - const char* old_cause = self->StartAssertNoThreadSuspension("ImageWriter"); + ScopedAssertNoThreadSuspension ants(Thread::Current(), "ImageWriter"); gc::Heap* heap = Runtime::Current()->GetHeap(); // TODO: heap validation can't handle this fix up pass heap->DisableObjectValidation(); // TODO: Image spaces only? - WriterMutexLock mu(self, *Locks::heap_bitmap_lock_); + WriterMutexLock mu(ants.Self(), *Locks::heap_bitmap_lock_); heap->VisitObjects(CopyAndFixupObjectsCallback, this); // Fix up the object previously had hash codes. for (const std::pair<mirror::Object*, uint32_t>& hash_pair : saved_hashes_) { hash_pair.first->SetLockWord(LockWord::FromHashCode(hash_pair.second), false); } saved_hashes_.clear(); - self->EndAssertNoThreadSuspension(old_cause); } void ImageWriter::CopyAndFixupObjectsCallback(Object* obj, void* arg) { |