[release/9.0-staging] DATAS BGC thread synchronization fix by Maoni0 · Pull Request #110174 · dotnet/runtime (original) (raw)

Backport of #109804 to release/9.0-staging

/cc @mangod9 @mrsharm

Customer Impact

Original issue: #109804. Customers discovered a hang because one of the BGC threads had disappeared which shouldn't have happened - this is due to a BGC thread that was not needed during a previous BGC (because DATAS only needed a subset of BGC threads for that BGC to run) ran at a time when settings.concurrent was FALSE so it exited.

Regression

Testing

I have added stress code in GC (under STRESS_DYNAMIC_HEAP_COUNT) to make the repro quite easy.

Risk

Low. This has gone through extensive testing on both Windows and Linux.