diff options
Diffstat (limited to 'lib/internal/worker/io.js')
-rw-r--r-- | lib/internal/worker/io.js | 20 |
1 files changed, 7 insertions, 13 deletions
diff --git a/lib/internal/worker/io.js b/lib/internal/worker/io.js index a72868916c..e88991aaab 100644 --- a/lib/internal/worker/io.js +++ b/lib/internal/worker/io.js @@ -6,7 +6,9 @@ const { } = internalBinding('symbols'); const { MessagePort, - MessageChannel + MessageChannel, + drainMessagePort, + stopMessagePort } = internalBinding('messaging'); const { threadId } = internalBinding('worker'); @@ -33,13 +35,6 @@ const messageTypes = { LOAD_SCRIPT: 'loadScript' }; -// Original drain from C++ -const originalDrain = MessagePort.prototype.drain; - -function drainMessagePort(port) { - return originalDrain.call(port); -} - // We have to mess with the MessagePort prototype a bit, so that a) we can make // it inherit from EventEmitter, even though it is a C++ class, and b) we do // not provide methods that are not present in the Browser and not documented @@ -51,9 +46,8 @@ const MessagePortPrototype = Object.create( // Set up the new inheritance chain. Object.setPrototypeOf(MessagePort, EventEmitter); Object.setPrototypeOf(MessagePort.prototype, EventEmitter.prototype); -// Finally, purge methods we don't want to be public. -delete MessagePort.prototype.stop; -delete MessagePort.prototype.drain; +// Copy methods that are inherited from HandleWrap, because +// changing the prototype of MessagePort.prototype implicitly removed them. MessagePort.prototype.ref = MessagePortPrototype.ref; MessagePort.prototype.unref = MessagePortPrototype.unref; @@ -84,7 +78,7 @@ Object.defineProperty(MessagePort.prototype, 'onmessage', { MessagePortPrototype.start.call(this); } else { this.unref(); - MessagePortPrototype.stop.call(this); + stopMessagePort(this); } } }); @@ -152,7 +146,7 @@ function setupPortReferencing(port, eventEmitter, eventName) { }); eventEmitter.on('removeListener', (name) => { if (name === eventName && eventEmitter.listenerCount(eventName) === 0) { - MessagePortPrototype.stop.call(port); + stopMessagePort(port); port.unref(); } }); |