As per our dump analysis, we found that the page is running / calling one of the STA COM component. So the thread running the page (thread 16) is unloading the AppDomain. On another thread in the process of unloading AppDomain we call GC which is normal. When we call GC, Finalizer thread goes off to clean up RCWs. It’s attempting to clean them up and it needs to switch to an STA thread.
The STA thread it’s trying to switch to is thread 16 - the one that’s running the page. That thread is in a wait state, waiting for AppDomain unload to finish, so we’re essentially in a deadlock.
The problem here is that thread 16 got switched to STA (from MTA) most likely by calling CoInitialize/CoUnInitialize by a COM component (we don’t know which one but it requies STA). CLR went into a regular wait state on it, since it wasn’t aware of this and it still thinks the thread is an MTA thread and this wait state doesn’t allow for anyone to switch to that thread while waiting.. (it doesn’t pump messages).
Action Plan:
We have to add an attribute AspCompat="true" in the page directive and test whether the issue still comes up.