This is because sendq_move_to_sendmarkq(...) will never be reinvoked, so the message remains at the head of the sendq.
Instead, sendq_move_to_sendmarkq(...) should be invoked every time a message with a valid block is sent, even if it's a retry. This change would slightly change the semantics of the operation such that any implementations will have to check whether the block passed in is actually the head of the sendq.
This is because
sendq_move_to_sendmarkq(...)
will never be reinvoked, so the message remains at the head of the sendq.Instead,
sendq_move_to_sendmarkq(...)
should be invoked every time a message with a valid block is sent, even if it's a retry. This change would slightly change the semantics of the operation such that any implementations will have to check whether the block passed in is actually the head of the sendq.