| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
1 parent cad6d99 commit 3ca9e65
1 file changed
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -5,7 +5,6 @@ const { | |||
| 5 | 5 | JSONStringify, | |
| 6 | 6 | StringPrototypeSplit, | |
| 7 | 7 | ArrayPrototypePush, | |
| 8 | - ReflectApply, | ||
| 9 | 8 | Symbol, | |
| 10 | 9 | TypedArrayPrototypeSubarray, | |
| 11 | 10 | } = primordials; | |
@@ -15,7 +14,6 @@ const v8 = require('v8'); | |||
| 15 | 14 | const { isArrayBufferView } = require('internal/util/types'); | |
| 16 | 15 | const assert = require('internal/assert'); | |
| 17 | 16 | const { streamBaseState, kLastWriteWasAsync } = internalBinding('stream_wrap'); | |
| 18 | - const { readUInt32BE } = require('internal/buffer'); | ||
| 19 | 17 | ||
| 20 | 18 | const kMessageBuffer = Symbol('kMessageBuffer'); | |
| 21 | 19 | const kMessageBufferSize = Symbol('kMessageBufferSize'); | |
@@ -71,7 +69,12 @@ const advanced = { | |||
| 71 | 69 | while (messageBufferHead.length >= 4) { | |
| 72 | 70 | // We call `readUInt32BE` manually here, because this is faster than first converting | |
| 73 | 71 | // it to a buffer and using `readUInt32BE` on that. | |
| 74 | - const fullMessageSize = ReflectApply(readUInt32BE, messageBufferHead, [0]) + 4; | ||
| 72 | + const fullMessageSize = ( | ||
| 73 | + messageBufferHead[0] << 24 | | ||
| 74 | + messageBufferHead[1] << 16 | | ||
| 75 | + messageBufferHead[2] << 8 | | ||
| 76 | + messageBufferHead[3] | ||
| 77 | + ) + 4; | ||
| 75 | 78 | ||
| 76 | 79 | if (channel[kMessageBufferSize] < fullMessageSize) break; | |
| 77 | 80 | ||
@@ -100,20 +103,27 @@ const advanced = { | |||
| 100 | 103 | ||
| 101 | 104 | writeChannelMessage(channel, req, message, handle) { | |
| 102 | 105 | const ser = new ChildProcessSerializer(); | |
| 106 | + // Add 4 bytes, to later populate with message length | ||
| 107 | + ser.writeRawBytes(Buffer.allocUnsafe(4)); | ||
| 103 | 108 | ser.writeHeader(); | |
| 104 | 109 | ser.writeValue(message); | |
| 110 | + | ||
| 105 | 111 | const serializedMessage = ser.releaseBuffer(); | |
| 106 | - const sizeBuffer = Buffer.allocUnsafe(4); | ||
| 107 | - sizeBuffer.writeUInt32BE(serializedMessage.length); | ||
| 108 | - | ||
| 109 | - const buffer = Buffer.concat([ | ||
| 110 | - sizeBuffer, | ||
| 111 | - serializedMessage, | ||
| 112 | - ]); | ||
| 113 | - const result = channel.writeBuffer(req, buffer, handle); | ||
| 112 | + const serializedMessageLength = serializedMessage.length - 4; | ||
| 113 | + | ||
| 114 | + serializedMessage.set([ | ||
| 115 | + serializedMessageLength >> 24 & 0xFF, | ||
| 116 | + serializedMessageLength >> 16 & 0xFF, | ||
| 117 | + serializedMessageLength >> 8 & 0xFF, | ||
| 118 | + serializedMessageLength & 0xFF, | ||
| 119 | + ], 0); | ||
| 120 | + | ||
| 121 | + const result = channel.writeBuffer(req, serializedMessage, handle); | ||
| 122 | + | ||
| 114 | 123 | // Mirror what stream_base_commons.js does for Buffer retention. | |
| 115 | 124 | if (streamBaseState[kLastWriteWasAsync]) | |
| 116 | - req.buffer = buffer; | ||
| 125 | + req.buffer = serializedMessage; | ||
| 126 | + | ||
| 117 | 127 | return result; | |
| 118 | 128 | }, | |
| 119 | 129 | }; | |
| Back | FazBrowse Home | New Git URL |
0 commit comments