mirror of
https://github.com/denoland/deno.git
synced 2025-09-24 19:32:30 +00:00
fix(ext/node): worker_threads doesn't exit if there are message listeners (#22944)
Closes https://github.com/denoland/deno/issues/22934
This commit is contained in:
parent
e40f9a5c14
commit
c342cd36ba
7 changed files with 91 additions and 36 deletions
|
@ -279,7 +279,10 @@ function postMessage(message, transferOrOptions = {}) {
|
|||
|
||||
let isClosing = false;
|
||||
let globalDispatchEvent;
|
||||
let closeOnIdle;
|
||||
|
||||
function hasMessageEventListener() {
|
||||
return event.listenerCount(globalThis, "message") > 0;
|
||||
}
|
||||
|
||||
async function pollForMessages() {
|
||||
if (!globalDispatchEvent) {
|
||||
|
@ -289,14 +292,7 @@ async function pollForMessages() {
|
|||
);
|
||||
}
|
||||
while (!isClosing) {
|
||||
const op = op_worker_recv_message();
|
||||
// In a Node.js worker, unref() the op promise to prevent it from
|
||||
// keeping the event loop alive. This avoids the need to explicitly
|
||||
// call self.close() or worker.terminate().
|
||||
if (closeOnIdle) {
|
||||
core.unrefOpPromise(op);
|
||||
}
|
||||
const data = await op;
|
||||
const data = await op_worker_recv_message();
|
||||
if (data === null) break;
|
||||
const v = messagePort.deserializeJsMessageData(data);
|
||||
const message = v[0];
|
||||
|
@ -813,7 +809,6 @@ function bootstrapWorkerRuntime(
|
|||
7: shouldDisableDeprecatedApiWarning,
|
||||
8: shouldUseVerboseDeprecatedApiWarning,
|
||||
9: _future,
|
||||
10: closeOnIdle_,
|
||||
} = runtimeOptions;
|
||||
|
||||
deprecatedApiWarningDisabled = shouldDisableDeprecatedApiWarning;
|
||||
|
@ -875,8 +870,8 @@ function bootstrapWorkerRuntime(
|
|||
|
||||
location.setLocationHref(location_);
|
||||
|
||||
closeOnIdle = closeOnIdle_;
|
||||
globalThis.pollForMessages = pollForMessages;
|
||||
globalThis.hasMessageEventListener = hasMessageEventListener;
|
||||
|
||||
// TODO(bartlomieju): deprecate --unstable
|
||||
if (unstableFlag) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue