From ed15000a5099f5e230c8ded5ac75692bae272650 Mon Sep 17 00:00:00 2001 From: Mathieu Chartier Date: Fri, 28 Aug 2015 11:16:54 -0700 Subject: Fix some HandleScope bugs and add corresponding checks Some places were creating or destroying handle scopes without holding the mutator lock. This can cause GC crashes if thread roots are being marked or hprof dumps to also fail. Also added checks to catch some of these errors. Bug: 23468617 Change-Id: I1a2d615923484cfc25014967656775c445aa3f1f --- compiler/optimizing/optimizing_compiler.cc | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'compiler/optimizing/optimizing_compiler.cc') diff --git a/compiler/optimizing/optimizing_compiler.cc b/compiler/optimizing/optimizing_compiler.cc index 2a7699105c..1db3063aec 100644 --- a/compiler/optimizing/optimizing_compiler.cc +++ b/compiler/optimizing/optimizing_compiler.cc @@ -540,11 +540,14 @@ CompiledMethod* OptimizingCompiler::CompileOptimized(HGraph* graph, CompilerDriver* compiler_driver, const DexCompilationUnit& dex_compilation_unit, PassObserver* pass_observer) const { - StackHandleScopeCollection handles(Thread::Current()); + ScopedObjectAccess soa(Thread::Current()); + StackHandleScopeCollection handles(soa.Self()); + soa.Self()->TransitionFromRunnableToSuspended(kNative); RunOptimizations(graph, compiler_driver, compilation_stats_.get(), dex_compilation_unit, pass_observer, &handles); if (graph->HasTryCatch()) { + soa.Self()->TransitionFromSuspendedToRunnable(); return nullptr; } @@ -582,6 +585,8 @@ CompiledMethod* OptimizingCompiler::CompileOptimized(HGraph* graph, ArrayRef(*codegen->GetAssembler()->cfi().data()), ArrayRef(linker_patches)); pass_observer->DumpDisassembly(); + + soa.Self()->TransitionFromSuspendedToRunnable(); return compiled_method; } -- cgit v1.2.3-59-g8ed1b