// We *can* deliver messages from *different* senders concurrently, e.g. reception of P1, Q1, P2, Q2 can result in
// delivery of P1, Q1, Q2, P2: FIFO (implemented by UNICAST) says messages need to be delivered only in the
// order in which they were sent by their senders
try {
while(true) {
List<Message> msgs=win.removeMany();
if(msgs.isEmpty())
return;
Message highest_removed=msgs.get(msgs.size() -1);
sendAckForMessage(highest_removed); // guaranteed not to throw an exception !