tighten up the last async-related implementation by fixing some fault paths

and edge cases