diff --git a/lib/internal/worker.js b/lib/internal/worker.js index f3f3c23a5abe..728132f779e3 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 000000000000..1ede0d88254b --- /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); +}));