X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ian/git?p=hippotat.git;a=blobdiff_plain;f=server%2Fsuser.rs;fp=server%2Fsuser.rs;h=cd3210560fd4309b4c186cb508f21a5b4eda6195;hp=69bbf877bf49829ce7c8520f0cb27b2ffae2c142;hb=0c02b6d45f43a852431d4c92f0be229c9dbe9194;hpb=f3a7d0d19a1c2bc55d9c3467f9f81765ebd2a7f5 diff --git a/server/suser.rs b/server/suser.rs index 69bbf87..cd32105 100644 --- a/server/suser.rs +++ b/server/suser.rs @@ -51,11 +51,16 @@ pub async fn run(global: Arc, .sat(); if let Some(req) = { + let now = Instant::now(); + if ! downbound.is_empty() { outstanding.pop_front() } else if let Some((i,_)) = outstanding.iter().enumerate().find({ - |(_,o)| outstanding.len() > o.oi.target_requests_outstanding.sat() - // xxx need timeout-based return too + |(_,o)| { + outstanding.len() > o.oi.target_requests_outstanding.sat() + || + o.oi.deadline < now + } }) { Some(outstanding.remove(i).unwrap()) } else { @@ -91,6 +96,7 @@ pub async fn run(global: Arc, while downbound.total_len() > max { let _ = downbound.pop_front(); + trace!("{} discarding downbound-queue-full", &ic.link); } select!{