remeber the first sending transfer that could not send any packets and start there next iterate
This commit is contained in:
parent
ba8befbb2d
commit
070585ab3d
@ -286,10 +286,19 @@ void NGCFT1::iteratePeer(float time_delta, uint32_t group_number, uint32_t peer_
|
|||||||
auto timeouts = peer.cca->getTimeouts();
|
auto timeouts = peer.cca->getTimeouts();
|
||||||
std::set<CCAI::SeqIDType> timeouts_set{timeouts.cbegin(), timeouts.cend()};
|
std::set<CCAI::SeqIDType> timeouts_set{timeouts.cbegin(), timeouts.cend()};
|
||||||
|
|
||||||
|
|
||||||
for (size_t idx = 0; idx < peer.send_transfers.size(); idx++) {
|
|
||||||
if (peer.send_transfers.at(idx).has_value()) {
|
|
||||||
int64_t can_packet_size {peer.cca->canSend()}; // might get more space while iterating (time)
|
int64_t can_packet_size {peer.cca->canSend()}; // might get more space while iterating (time)
|
||||||
|
|
||||||
|
// change iterat start position to not starve transfers in the back
|
||||||
|
size_t iterated_count = 0;
|
||||||
|
bool last_send_found = false;
|
||||||
|
for (size_t idx = peer.next_send_transfer_send_idx; iterated_count < peer.send_transfers.size(); idx++, iterated_count++) {
|
||||||
|
idx = idx % peer.send_transfers.size();
|
||||||
|
|
||||||
|
if (peer.send_transfers.at(idx).has_value()) {
|
||||||
|
if (!last_send_found && can_packet_size <= 0) {
|
||||||
|
peer.next_send_transfer_send_idx = idx;
|
||||||
|
last_send_found = true; // only set once
|
||||||
|
}
|
||||||
updateSendTransfer(time_delta, group_number, peer_number, peer, idx, timeouts_set, can_packet_size);
|
updateSendTransfer(time_delta, group_number, peer_number, peer, idx, timeouts_set, can_packet_size);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -188,6 +188,7 @@ class NGCFT1 : public ToxEventI, public NGCEXTEventI, public NGCFT1EventProvider
|
|||||||
};
|
};
|
||||||
std::array<std::optional<SendTransfer>, 256> send_transfers;
|
std::array<std::optional<SendTransfer>, 256> send_transfers;
|
||||||
size_t next_send_transfer_idx {0}; // next id will be 0
|
size_t next_send_transfer_idx {0}; // next id will be 0
|
||||||
|
size_t next_send_transfer_send_idx {0};
|
||||||
};
|
};
|
||||||
std::map<uint32_t, Peer> peers;
|
std::map<uint32_t, Peer> peers;
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user