Can we avoid this exception by remembering that a hold must me sent later? That is, if I call hold when it can't be sent, we remember it (hold_requested or something) and just mute the streams. Then after finishing a reinvite (and other conditions) we can check if hold was requested, and if so the re-INVITE can be sent.