mirror of
https://gitlab.computer.surgery/matrix/grapevine.git
synced 2025-12-18 08:11:24 +01:00
Use OnDemandHashMap for servername_ratelimiter
This way, semaphores are actually cleaned up eventually.
This commit is contained in:
parent
2c19abc535
commit
07b5233980
2 changed files with 8 additions and 22 deletions
|
|
@ -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()
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue