I've taken a quick look at this and it may be me that broke it. The fix that prevented crashing due to contexts not being ready and more than one context with the same FD etc. You know the one thats really difficult to explain.
It probably broke asynch operation. I made several assumptions on the types of contexts that could be selected on and which ones to check the fd of after select. Maybe these assumptions are flawed. What exactly happens to the context when an async message is sent?