summaryrefslogtreecommitdiff
path: root/runtime/gc/reference_processor.cc
diff options
context:
space:
mode:
author Hans Boehm <hboehm@google.com> 2021-08-03 17:24:31 -0700
committer Hans Boehm <hboehm@google.com> 2021-08-04 15:18:34 +0000
commit1d9d3587dafb7078082b4d4058eea753c13ef94f (patch)
treea131a7f29aa142b9d472e034143a6c7c4ad373da /runtime/gc/reference_processor.cc
parent0e8585342b1b26a0ec33421f9d4ab16cb9851ce4 (diff)
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
Diffstat (limited to 'runtime/gc/reference_processor.cc')
-rw-r--r--runtime/gc/reference_processor.cc1
1 files changed, 1 insertions, 0 deletions
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<mirror::Object> ReferenceProcessor::GetReferent(Thread* self,
started_trace = true;
start_millis = MilliTime();
}
+ ScopedThreadSuspension sts(self, ThreadState::kSuspended);
condition_.WaitHoldingLocks(self);
}
if (started_trace) {