In cases where MF is already shut down, simply forwarding MFShutdown() to RtwqShutdown() will corrupt the Rtwq lock count if async result objects still exist, because they hold a lock. JR East Train Simulator does this.
-- v2: mf: Release the sample if stream sink processing fails.