Commit d9208ccdccb for nodejs
commit d9208ccdccb1c6cd5bd0011df0775e860c5d2d1e
Author: Dayun <dlekdbs6530@gmail.com>
Date: Sun Sep 27 04:42:29 2026 +0900
worker: remove messageerror listeners on exit
Signed-off-by: Dayun <dlekdbs6530@gmail.com>
PR-URL: https://github.com/nodejs/node/pull/66075
Fixes: https://github.com/nodejs/node/issues/65782
Reviewed-By: James M Snell <jasnell@gmail.com>
diff --git a/lib/internal/worker.js b/lib/internal/worker.js
index f3f3c23a5ab..728132f779e 100644
--- a/lib/internal/worker.js
+++ b/lib/internal/worker.js
@@ -393,7 +393,7 @@ class Worker extends EventEmitter {
drainMessagePort(this[kPort]);
destroyMainThreadPort(this.threadId);
this.removeAllListeners('message');
- this.removeAllListeners('messageerrors');
+ this.removeAllListeners('messageerror');
this[kPublicPort].unref();
this[kPort].unref();
this[kDispose]();
diff --git a/test/parallel/test-worker-messageerror-listener-cleanup.js b/test/parallel/test-worker-messageerror-listener-cleanup.js
new file mode 100644
index 00000000000..1ede0d88254
--- /dev/null
+++ b/test/parallel/test-worker-messageerror-listener-cleanup.js
@@ -0,0 +1,16 @@
+'use strict';
+
+const common = require('../common');
+const assert = require('node:assert');
+const { Worker } = require('node:worker_threads');
+
+const worker = new Worker('', { eval: true });
+const listener = () => {};
+
+worker.on('message', listener);
+worker.on('messageerror', listener);
+
+worker.on('exit', common.mustCall(() => {
+ assert.strictEqual(worker.listenerCount('message'), 0);
+ assert.strictEqual(worker.listenerCount('messageerror'), 0);
+}));