summaryrefslogtreecommitdiff
path: root/ext/flash/01_http.js
diff options
context:
space:
mode:
authorYusuke Tanaka <yusuktan@maguro.dev>2022-11-25 02:38:09 +0900
committerGitHub <noreply@github.com>2022-11-24 18:38:09 +0100
commitfd023cf7937e67dfde5482d34ebc60839eb7397c (patch)
tree816c976254071ecd9c15a35ad6b68d78066428d1 /ext/flash/01_http.js
parentb6f49cf4790926df125add2329611a8eff8db9da (diff)
fix(ext/flash): graceful server startup/shutdown with unsettled promises in mind (#16616)
This PR resets the revert commit made by #16610, bringing back #16383 which attempts to fix the issue happening when we use the flash server with `--watch` option enabled. Also, some code changes are made to pass the regression test added in #16610.
Diffstat (limited to 'ext/flash/01_http.js')
-rw-r--r--ext/flash/01_http.js26
1 files changed, 11 insertions, 15 deletions
diff --git a/ext/flash/01_http.js b/ext/flash/01_http.js
index 2b0caff49..67729ee39 100644
--- a/ext/flash/01_http.js
+++ b/ext/flash/01_http.js
@@ -188,8 +188,8 @@
return str;
}
- function prepareFastCalls() {
- return core.ops.op_flash_make_request();
+ function prepareFastCalls(serverId) {
+ return core.ops.op_flash_make_request(serverId);
}
function hostnameForDisplay(hostname) {
@@ -495,15 +495,11 @@
const serverId = opFn(listenOpts);
const serverPromise = core.opAsync("op_flash_drive_server", serverId);
-
- PromisePrototypeCatch(
- PromisePrototypeThen(
- core.opAsync("op_flash_wait_for_listening", serverId),
- (port) => {
- onListen({ hostname: listenOpts.hostname, port });
- },
- ),
- () => {},
+ const listenPromise = PromisePrototypeThen(
+ core.opAsync("op_flash_wait_for_listening", serverId),
+ (port) => {
+ onListen({ hostname: listenOpts.hostname, port });
+ },
);
const finishedPromise = PromisePrototypeCatch(serverPromise, () => {});
@@ -519,7 +515,7 @@
return;
}
server.closed = true;
- await core.opAsync("op_flash_close_server", serverId);
+ core.ops.op_flash_close_server(serverId);
await server.finished;
},
async serve() {
@@ -634,7 +630,7 @@
signal?.addEventListener("abort", () => {
clearInterval(dateInterval);
- PromisePrototypeThen(server.close(), () => {}, () => {});
+ server.close();
}, {
once: true,
});
@@ -668,7 +664,7 @@
);
}
- const fastOp = prepareFastCalls();
+ const fastOp = prepareFastCalls(serverId);
let nextRequestSync = () => fastOp.nextRequest();
let getMethodSync = (token) => fastOp.getMethod(token);
let respondFast = (token, response, shutdown) =>
@@ -688,8 +684,8 @@
}
await SafePromiseAll([
+ listenPromise,
PromisePrototypeCatch(server.serve(), console.error),
- serverPromise,
]);
};
}