summaryrefslogtreecommitdiff
path: root/ext/http/00_serve.ts
diff options
context:
space:
mode:
Diffstat (limited to 'ext/http/00_serve.ts')
-rw-r--r--ext/http/00_serve.ts32
1 files changed, 12 insertions, 20 deletions
diff --git a/ext/http/00_serve.ts b/ext/http/00_serve.ts
index afcc16f38..b12a87390 100644
--- a/ext/http/00_serve.ts
+++ b/ext/http/00_serve.ts
@@ -49,7 +49,11 @@ import {
ResponsePrototype,
toInnerResponse,
} from "ext:deno_fetch/23_response.js";
-import { fromInnerRequest, toInnerRequest } from "ext:deno_fetch/23_request.js";
+import {
+ abortRequest,
+ fromInnerRequest,
+ toInnerRequest,
+} from "ext:deno_fetch/23_request.js";
import { AbortController } from "ext:deno_web/03_abort_signal.js";
import {
_eventLoop,
@@ -126,8 +130,6 @@ function addTrailers(resp, headerList) {
op_http_set_response_trailers(inner.external, headerList);
}
-let signalAbortError;
-
class InnerRequest {
#external;
#context;
@@ -137,14 +139,13 @@ class InnerRequest {
#upgraded;
#urlValue;
#completed;
- #abortController;
+ request;
- constructor(external, context, abortController) {
+ constructor(external, context) {
this.#external = external;
this.#context = context;
this.#upgraded = false;
this.#completed = undefined;
- this.#abortController = abortController;
}
close(success = true) {
@@ -158,15 +159,7 @@ class InnerRequest {
);
}
}
- if (!signalAbortError) {
- signalAbortError = new DOMException(
- "The request has been cancelled.",
- "AbortError",
- );
- }
- // Unconditionally abort the request signal. Note that we don't use
- // an error here.
- this.#abortController.abort(signalAbortError);
+ abortRequest(this.request);
this.#external = null;
}
@@ -492,17 +485,16 @@ function fastSyncResponseOrStream(
*/
function mapToCallback(context, callback, onError) {
return async function (req) {
- const abortController = new AbortController();
- const signal = abortController.signal;
-
// Get the response from the user-provided callback. If that fails, use onError. If that fails, return a fallback
// 500 error.
let innerRequest;
let response;
try {
- innerRequest = new InnerRequest(req, context, abortController);
+ innerRequest = new InnerRequest(req, context);
+ const request = fromInnerRequest(innerRequest, "immutable");
+ innerRequest.request = request;
response = await callback(
- fromInnerRequest(innerRequest, signal, "immutable"),
+ request,
new ServeHandlerInfo(innerRequest),
);