diff --git a/src/core/utils/mutex_map.rs b/src/core/utils/mutex_map.rs index cc593014..2b9e59c6 100644 --- a/src/core/utils/mutex_map.rs +++ b/src/core/utils/mutex_map.rs @@ -1,4 +1,5 @@ use std::{ + borrow::ToOwned, fmt::Debug, hash::Hash, sync::{Arc, TryLockError::WouldBlock}, @@ -38,17 +39,15 @@ where } #[tracing::instrument(level = "trace", skip(self))] - pub async fn lock<'a, K>(&'a self, k: &'a K) -> Guard + pub async fn lock(&self, k: &K) -> Guard where - K: Debug + Send + ?Sized + Sync, - Key: TryFrom<&'a K>, - >::Error: Debug, + K: Debug + Send + ?Sized + Sync + ToOwned, { let val = self .map .lock() .expect("locked") - .entry(k.try_into().expect("failed to construct key")) + .entry(k.to_owned()) .or_default() .clone(); @@ -59,17 +58,15 @@ where } #[tracing::instrument(level = "trace", skip(self))] - pub fn try_lock<'a, K>(&self, k: &'a K) -> Result> + pub fn try_lock(&self, k: &K) -> Result> where - K: Debug + Send + ?Sized + Sync, - Key: TryFrom<&'a K>, - >::Error: Debug, + K: Debug + Send + ?Sized + Sync + ToOwned, { let val = self .map .lock() .expect("locked") - .entry(k.try_into().expect("failed to construct key")) + .entry(k.to_owned()) .or_default() .clone(); @@ -82,11 +79,9 @@ where } #[tracing::instrument(level = "trace", skip(self))] - pub fn try_try_lock<'a, K>(&self, k: &'a K) -> Result> + pub fn try_try_lock(&self, k: &K) -> Result> where - K: Debug + Send + ?Sized + Sync, - Key: TryFrom<&'a K>, - >::Error: Debug, + K: Debug + Send + ?Sized + Sync + ToOwned, { let val = self .map @@ -95,7 +90,7 @@ where | WouldBlock => err!("would block"), | _ => panic!("{e:?}"), })? - .entry(k.try_into().expect("failed to construct key")) + .entry(k.to_owned()) .or_default() .clone(); diff --git a/src/service/resolver/actual.rs b/src/service/resolver/actual.rs index 213f3aba..541668aa 100644 --- a/src/service/resolver/actual.rs +++ b/src/service/resolver/actual.rs @@ -43,7 +43,7 @@ impl super::Service { return Ok((result, true)); } - let _dedup = self.resolving.lock(server_name.as_str()); + let _dedup = self.resolving.lock(server_name); if let Ok(result) = self.cache.get_destination(server_name).await { return Ok((result, true)); } diff --git a/src/service/resolver/mod.rs b/src/service/resolver/mod.rs index 14f7f2a2..0980a21b 100644 --- a/src/service/resolver/mod.rs +++ b/src/service/resolver/mod.rs @@ -9,7 +9,8 @@ mod well_known; use std::sync::Arc; use async_trait::async_trait; -use tuwunel_core::{Result, arrayvec::ArrayString, smallstr::SmallString, utils::MutexMap}; +use ruma::OwnedServerName; +use tuwunel_core::{Result, smallstr::SmallString, utils::MutexMap}; use self::{cache::Cache, dns::Resolver, fed::FedDest}; @@ -21,8 +22,7 @@ pub struct Service { } pub(crate) type DestString = SmallString<[u8; 40]>; -type Resolving = MutexMap; -type NameBuf = ArrayString<256>; +type Resolving = MutexMap; #[async_trait] impl crate::Service for Service {