diff --git a/graal-nodejs/lib/internal/worker/io.js b/graal-nodejs/lib/internal/worker/io.js index 5dbe16fbf38..389f9f02791 100644 --- a/graal-nodejs/lib/internal/worker/io.js +++ b/graal-nodejs/lib/internal/worker/io.js @@ -22,6 +22,7 @@ const { const { kEmptyObject, kEnumerableProperty, + setOwnProperty, } = require('internal/util'); const { @@ -312,15 +313,15 @@ function setupPortReferencing(port, eventEmitter, eventName) { if (name === eventName) removeListener(eventEmitter.listenerCount(name)); }); const origNewListener = eventEmitter[kNewListener]; - eventEmitter[kNewListener] = function(size, type, ...args) { + setOwnProperty(eventEmitter, kNewListener, function(size, type, ...args) { if (type === eventName) newListener(size - 1); return ReflectApply(origNewListener, this, arguments); - }; + }); const origRemoveListener = eventEmitter[kRemoveListener]; - eventEmitter[kRemoveListener] = function(size, type, ...args) { + setOwnProperty(eventEmitter, kRemoveListener, function(size, type, ...args) { if (type === eventName) removeListener(size); return ReflectApply(origRemoveListener, this, arguments); - }; + }); function newListener(size) { if (size === 0) { diff --git a/graal-nodejs/test/parallel/test-worker-message-channel.js b/graal-nodejs/test/parallel/test-worker-message-channel.js index 8f66ef87e6e..1d755075393 100644 --- a/graal-nodejs/test/parallel/test-worker-message-channel.js +++ b/graal-nodejs/test/parallel/test-worker-message-channel.js @@ -3,6 +3,9 @@ const common = require('../common'); const assert = require('assert'); const { MessageChannel, MessagePort, Worker } = require('worker_threads'); +// Asserts that freezing the EventTarget prototype does not make the internal throw. +Object.freeze(EventTarget.prototype); + { const channel = new MessageChannel();