diff options
| author | 2021-08-03 17:24:31 -0700 | |
|---|---|---|
| committer | 2021-08-04 15:18:34 +0000 | |
| commit | 1d9d3587dafb7078082b4d4058eea753c13ef94f (patch) | |
| tree | a131a7f29aa142b9d472e034143a6c7c4ad373da /runtime/gc/reference_processor.cc | |
| parent | 0e8585342b1b26a0ec33421f9d4ab16cb9851ce4 (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.cc | 1 |
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) { |