Merge pull request #1698 from ealmloff/fix-server-function-early-disconnect
This commit is contained in:
1 file changed
+19
-19
@@ -89,26 +89,26 @@ impl Service for ServerFnHandler {
|
|||||||
let parts = Arc::new(RwLock::new(parts));
|
let parts = Arc::new(RwLock::new(parts));
|
||||||
|
|
||||||
// Because the future returned by `server_fn_handler` is `Send`, and the future returned by this function must be send, we need to spawn a new runtime
|
// Because the future returned by `server_fn_handler` is `Send`, and the future returned by this function must be send, we need to spawn a new runtime
|
||||||
let (resp_tx, resp_rx) = tokio::sync::oneshot::channel();
|
|
||||||
let pool = get_local_pool();
|
let pool = get_local_pool();
|
||||||
pool.spawn_pinned({
|
let result = pool
|
||||||
let function = function.clone();
|
.spawn_pinned({
|
||||||
let mut server_context = server_context.clone();
|
let function = function.clone();
|
||||||
server_context.parts = parts;
|
let mut server_context = server_context.clone();
|
||||||
move || async move {
|
server_context.parts = parts;
|
||||||
let data = match function.encoding() {
|
move || async move {
|
||||||
Encoding::Url | Encoding::Cbor => &body,
|
let data = match function.encoding() {
|
||||||
Encoding::GetJSON | Encoding::GetCBOR => &query,
|
Encoding::Url | Encoding::Cbor => &body,
|
||||||
};
|
Encoding::GetJSON | Encoding::GetCBOR => &query,
|
||||||
let server_function_future = function.call((), data);
|
};
|
||||||
let server_function_future =
|
let server_function_future = function.call((), data);
|
||||||
ProvideServerContext::new(server_function_future, server_context.clone());
|
let server_function_future = ProvideServerContext::new(
|
||||||
let resp = server_function_future.await;
|
server_function_future,
|
||||||
|
server_context.clone(),
|
||||||
resp_tx.send(resp).unwrap();
|
);
|
||||||
}
|
server_function_future.await
|
||||||
});
|
}
|
||||||
let result = resp_rx.await.unwrap();
|
})
|
||||||
|
.await?;
|
||||||
let mut res = http::Response::builder();
|
let mut res = http::Response::builder();
|
||||||
|
|
||||||
// Set the headers from the server context
|
// Set the headers from the server context
|
||||||
|
|||||||
Reference in new issue
Block a user