This should have made it run concurrently with other annex actions, but I'm still seeing it serialize. Perhaps I need to forkProcess?
modifyMVar_ catches exceptions, so no need to roll my own
A few places catch IO errors after calling runThreadState, but since the MVar was not restored, it'd later deadlock trying to read from it. I'd like to catch all exceptions here, but I could not get the types to unify.