From 1d9d3587dafb7078082b4d4058eea753c13ef94f Mon Sep 17 00:00:00 2001 From: Hans Boehm Date: Tue, 3 Aug 2021 17:24:31 -0700 Subject: Don't block while runnable in getReferent() Change state before waiting on the GC, so that we can safely be suspended, thus avoiding surprisingly obscure deadlocks. Bug: 195336624 Test: Treehugger Change-Id: I7c7dff8030be962195b7521aac320e90d81defd9 --- runtime/gc/reference_processor.cc | 1 + 1 file changed, 1 insertion(+) (limited to 'runtime/gc/reference_processor.cc') diff --git a/runtime/gc/reference_processor.cc b/runtime/gc/reference_processor.cc index e34d140db4..12b13373d2 100644 --- a/runtime/gc/reference_processor.cc +++ b/runtime/gc/reference_processor.cc @@ -155,6 +155,7 @@ ObjPtr ReferenceProcessor::GetReferent(Thread* self, started_trace = true; start_millis = MilliTime(); } + ScopedThreadSuspension sts(self, ThreadState::kSuspended); condition_.WaitHoldingLocks(self); } if (started_trace) { -- cgit v1.2.3-59-g8ed1b