Mitigation for a GC Stress race after an inline pinvoke (#38246)
authorAndy Ayers <andya@microsoft.com>
Tue, 23 Jun 2020 03:51:14 +0000 (20:51 -0700)
committerGitHub <noreply@github.com>
Tue, 23 Jun 2020 03:51:14 +0000 (20:51 -0700)
commitd6b8109177d0ba0eeafc8f7570c63cbc0b2f2562
tree75551ef5241ad9e79230aab73c1d69ae3137c6df
parent3052acc56d8c83111ff4698529de8b2c8eadcf02
Mitigation for a GC Stress race after an inline pinvoke (#38246)

In the post-call part of a pinvoke inline call frame, it's not safe
to start a stress mode GC in the window between checking
`g_TrapReturningThreads` and the call to `CORINFO_HELP_STOP_FOR_GC`.

The call instruction is already getting special treatement, but there may
be other instructions between the check and call. Instead of trying
to pattern match them all, suppress GC stress if `g_TrapReturningThreads`
is true, the thread is in cooperative mode, and there's an active inline
call frame.

Closes #37236.
src/coreclr/src/vm/gccover.cpp