I'm still trying to understand what side effects there are if a sendi
function fails. So far as I can tell, there are no written
contracts/specs about what should happen (please tell me if that's
wrong), so it's a matter of looking at the code. The only BTLs with
sendi code are portals, mx, and sm, and, among those, only mx has its
sendi function exposed outside the BTL. So, there seems to be room to
set new precedents.
One side effect is that if a sendi function fails, it should allocate a
descriptor. This makes no sense to me since the upper layer (PML)
already has code for this. So, it makes no sense to me that each
implementing BTL sendi function should also have such code. I think
it's much cleaner for a sendi either to complete successfully or else
leave no side effects.
Otherwise, does an unsuccessful sendi leave zero side effects? Things
are left as if the sendi had not been attempted at all?