Making sure I understand, the idea is that queuing any event should invoke user callback? Doesn't that create another potential race when callback might receive this MEError event successfully before queue was shut down? I know that's unlikely but the point is that QueueEvent + Shutdown is not "atomic".
Yes, indeed, and I missed that possibility, but I think it's then just a matter of handling such event like a source shutdown.
What is the core issue with session not noticing shut down sources? Is that when user calls source's Shutdown() during playback?
Yes. And sometimes the game calling Shutdown very close to when the playback ends, so possibly after the playback has ended and no more events are generated (so I don't think we can rely on something like "events are generated often enough during playback for the session to eventually notice the shutdown").