Mmm, I just realized that the hangs happens when the game calls media_source_Shutdown and the source is in the running state. Like this ``` 0288:trace:mfplat:media_source_Shutdown 00000000117942F0 state 1. 0288:trace:mfplat:media_source_Shutdown returning wg_parser_disconnect 0288:trace:mfplat:media_source_Shutdown 00000000117942F0 state 4. 0134:trace:mfplat:media_source_Shutdown 0000000011B1EFD0 state 1. 0134:trace:mfplat:media_source_Shutdown returning wg_parser_disconnect 0134:trace:mfplat:media_source_Shutdown 0000000011B1EFD0 state 4. 0134:trace:mfplat:media_source_Shutdown 0000000001F28C00 state 1. 0134:trace:mfplat:media_source_Shutdown returning wg_parser_disconnect 0134:trace:mfplat:media_source_Shutdown 0000000001F28C00 state 4. 01f8:trace:mfplat:media_source_Shutdown 0000000011794370 state 3. 01f8:trace:mfplat:media_source_Shutdown returning wg_parser_disconnect 0218:trace:mfplat:media_source_Shutdown 0000000011B1EFD0 state 1. 0218:trace:mfplat:media_source_Shutdown returning wg_parser_disconnect 0218:trace:mfplat:media_source_Shutdown 0000000011B1EFD0 state 4. 01e8:trace:mfplat:media_source_Shutdown 000000007844FC50 state 1. 01e8:trace:mfplat:media_source_Shutdown returning wg_parser_disconnect 01e8:trace:mfplat:media_source_Shutdown 000000007844FC50 state 4. 021c:trace:mfplat:media_source_Shutdown 0000000001F28C00 state 1. 021c:trace:mfplat:media_source_Shutdown returning wg_parser_disconnect 021c:trace:mfplat:media_source_Shutdown 0000000001F28C00 state 4. 0200:trace:mfplat:media_source_Shutdown 0000000011794870 state 3. ```
Normally it calls Shutdown when the source is in the 1 state (Stopped), in that state it calls wg_parser_disconnect, which in turn calls free_stream. When it's in the 4 state (Shutdown) it doesn't do anything, but at the end it's in the 3 state (Running), and there it calls wg_parser_disconnect but never returns, because it hangs at free_stream.