diff --git a/lektord/src/app/routes.rs b/lektord/src/app/routes.rs index a6953bbc277ae40ff7a4e4d6e03dc3329ff36dd7..cf23152101c32ba784c1e5849cb6fdc3c31e69d6 100644 --- a/lektord/src/app/routes.rs +++ b/lektord/src/app/routes.rs @@ -21,6 +21,7 @@ use lektor_utils::decode_base64_json; use rand::seq::SliceRandom; use std::ops::RangeBounds; use tokio::task::LocalSet; +use tokio::task::spawn_blocking; /// Get informations abount the lektord server. #[axum::debug_handler(state = LektorStatePtr)] @@ -557,7 +558,7 @@ macro_rules! extractor { => { $($match_pat:pat => $match_handle:expr,)+ } => |$arg:ident| $handle:expr $(,)? ) => { - async move { + move || { tokio::runtime::Builder::new_current_thread() .build() .context("failed to build the runtime")? @@ -578,7 +579,7 @@ pub(crate) async fn search( Path(uri): Path<String>, ) -> Result<Json<Vec<KId>>, LektordError> { let SearchData { from, regex } = decode_base64_json(uri)?; - Ok(tokio::spawn(extractor! { + Ok(spawn_blocking(extractor! { match from => { SearchFrom::Database => search_adaptors::database_extractor(&state).await, @@ -603,7 +604,7 @@ pub(crate) async fn count( Path(uri): Path<String>, ) -> Result<Json<usize>, LektordError> { let SearchData { from, regex } = decode_base64_json(uri)?; - Ok(tokio::spawn(extractor! { + Ok(spawn_blocking(extractor! { match from => { SearchFrom::Database => search_adaptors::database_extractor(&state).await,