Use OnDemandHashMap for servername_ratelimiter

This way, semaphores are actually cleaned up eventually.
This commit is contained in:
Lambda 2024-05-27 19:27:08 +00:00
parent 2c19abc535
commit 07b5233980
2 changed files with 8 additions and 22 deletions

View file

@ -1935,25 +1935,9 @@ impl Service {
let permit = services()
.globals
.servername_ratelimiter
.read()
.await
.get(origin)
.map(|s| Arc::clone(s).acquire_owned());
let permit = if let Some(p) = permit {
p
} else {
let mut write =
services().globals.servername_ratelimiter.write().await;
let s = Arc::clone(
write
.entry(origin.to_owned())
.or_insert_with(|| Arc::new(Semaphore::new(1))),
);
s.acquire_owned()
}
.await;
.get_or_insert_with(origin.to_owned(), || Semaphore::new(1))
.await;
let permit = permit.acquire().await;
let back_off = |id| async {
match services()