|
|
|
|
@ -1145,6 +1145,11 @@ static void pressure_tick(struct stream_network *net, uint64_t now) {
|
|
|
|
|
net->global_pressure = net->global_candidate && now - net->global_since_ms >= STREAM_LOAD_CONFIRM_MS; |
|
|
|
|
if (net->global_pressure) { |
|
|
|
|
uint64_t required = global.growth_rate ? global.growth_rate + global.growth_rate / 100 + 1 : global.queued.bytes / 2 + 1; |
|
|
|
|
for (struct stream_peer *p = net->peers; p && required; p = p->next) if (p->pressure.active) { |
|
|
|
|
uint64_t pending = p->pressure.required_rate > p->pressure.released_rate |
|
|
|
|
? p->pressure.required_rate - p->pressure.released_rate : 0; |
|
|
|
|
required = pending >= required ? 0 : required - pending; |
|
|
|
|
} |
|
|
|
|
for (unsigned pass = 0; pass < net->peer_count && required; pass++) { |
|
|
|
|
struct stream_peer *best = NULL; uint64_t best_rate = 0; |
|
|
|
|
for (struct stream_peer *p = net->peers; p; p = p->next) { |
|
|
|
|
|