Avoid locking extensions mutex when possible
This commit is contained in:
parent
a48953899c
commit
4e562a86a7
|
@ -196,13 +196,13 @@ impl Extensions {
|
|||
}
|
||||
|
||||
pub async fn prepare_request(
|
||||
&self,
|
||||
&mut self,
|
||||
ctx: &ExtensionContext<'_>,
|
||||
request: Request,
|
||||
) -> ServerResult<Request> {
|
||||
let mut request = request;
|
||||
if let Some(e) = &self.0 {
|
||||
for e in e.lock().iter_mut() {
|
||||
if let Some(e) = &mut self.0 {
|
||||
for e in e.get_mut().iter_mut() {
|
||||
request = e.prepare_request(ctx, request).await?;
|
||||
}
|
||||
}
|
||||
|
@ -210,33 +210,35 @@ impl Extensions {
|
|||
}
|
||||
|
||||
pub fn parse_start(
|
||||
&self,
|
||||
&mut self,
|
||||
ctx: &ExtensionContext<'_>,
|
||||
query_source: &str,
|
||||
variables: &Variables,
|
||||
) {
|
||||
if let Some(e) = &self.0 {
|
||||
e.lock()
|
||||
if let Some(e) = &mut self.0 {
|
||||
e.get_mut()
|
||||
.iter_mut()
|
||||
.for_each(|e| e.parse_start(ctx, query_source, variables));
|
||||
}
|
||||
}
|
||||
|
||||
pub fn parse_end(&self, ctx: &ExtensionContext<'_>, document: &ExecutableDocument) {
|
||||
if let Some(e) = &self.0 {
|
||||
e.lock().iter_mut().for_each(|e| e.parse_end(ctx, document));
|
||||
pub fn parse_end(&mut self, ctx: &ExtensionContext<'_>, document: &ExecutableDocument) {
|
||||
if let Some(e) = &mut self.0 {
|
||||
e.get_mut()
|
||||
.iter_mut()
|
||||
.for_each(|e| e.parse_end(ctx, document));
|
||||
}
|
||||
}
|
||||
|
||||
pub fn validation_start(&self, ctx: &ExtensionContext<'_>) {
|
||||
if let Some(e) = &self.0 {
|
||||
e.lock().iter_mut().for_each(|e| e.validation_start(ctx));
|
||||
pub fn validation_start(&mut self, ctx: &ExtensionContext<'_>) {
|
||||
if let Some(e) = &mut self.0 {
|
||||
e.get_mut().iter_mut().for_each(|e| e.validation_start(ctx));
|
||||
}
|
||||
}
|
||||
|
||||
pub fn validation_end(&self, ctx: &ExtensionContext<'_>) {
|
||||
if let Some(e) = &self.0 {
|
||||
e.lock().iter_mut().for_each(|e| e.validation_end(ctx));
|
||||
pub fn validation_end(&mut self, ctx: &ExtensionContext<'_>) {
|
||||
if let Some(e) = &mut self.0 {
|
||||
e.get_mut().iter_mut().for_each(|e| e.validation_end(ctx));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -333,7 +333,7 @@ where
|
|||
request: Request,
|
||||
) -> Result<(QueryEnvInner, CacheControl), Vec<ServerError>> {
|
||||
// create extension instances
|
||||
let extensions: Extensions = self
|
||||
let mut extensions: Extensions = self
|
||||
.0
|
||||
.extensions
|
||||
.iter()
|
||||
|
|
|
@ -39,9 +39,8 @@ where
|
|||
}
|
||||
selected.sort_by(|a, b| distances[a].cmp(&distances[b]));
|
||||
|
||||
let mut suggestion = String::with_capacity(
|
||||
prefix.len() + selected.iter().map(|s| s.len() + 5).sum::<usize>()
|
||||
);
|
||||
let mut suggestion =
|
||||
String::with_capacity(prefix.len() + selected.iter().map(|s| s.len() + 5).sum::<usize>());
|
||||
suggestion.push_str(prefix);
|
||||
suggestion.push(' ');
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user