skip_request: usize,
skip_response: usize,
max_msg_len: usize,
+ tx_index_completed: usize,
}
impl MQTTState {
skip_request: 0,
skip_response: 0,
max_msg_len: unsafe { MAX_MSG_LEN as usize },
+ tx_index_completed: 0,
}
}
}
}
if found {
+ self.tx_index_completed = 0;
self.transactions.remove(index);
}
}
tx.toserver = true;
}
if self.transactions.len() > unsafe { MQTT_MAX_TX } {
- for tx_old in &mut self.transactions {
+ let mut index = self.tx_index_completed;
+ for tx_old in self.transactions.iter_mut().skip(self.tx_index_completed) {
+ index = index + 1;
if !tx_old.complete {
tx_old.complete = true;
MQTTState::set_event(tx_old, MQTTEvent::TooManyTransactions);
break;
}
}
+ self.tx_index_completed = index;
}
return tx;
}