In the original C API, user could actually post_send and post_recv for a single QP at the same time (on different threads), but current implementation of PostSendGuard and PostRecvGuard won't allow us to do that, we need an implementation that provides split_mut to borrow a part of the QueuePair.