Skip to content

Commit bc1c7ce

Browse files
committed
1 parent 669113f commit bc1c7ce

File tree

3 files changed

+62
-17
lines changed

3 files changed

+62
-17
lines changed

graal-nodejs/lib/zlib.js

Lines changed: 25 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -560,10 +560,11 @@ function processCallback() {
560560
self.bytesWritten += inDelta;
561561

562562
const have = handle.availOutBefore - availOutAfter;
563+
let streamBufferIsFull = false;
563564
if (have > 0) {
564565
const out = self._outBuffer.slice(self._outOffset, self._outOffset + have);
565566
self._outOffset += have;
566-
self.push(out);
567+
streamBufferIsFull = !self.push(out);
567568
} else {
568569
assert(have === 0, 'have should not go down');
569570
}
@@ -588,13 +589,29 @@ function processCallback() {
588589
handle.inOff += inDelta;
589590
handle.availInBefore = availInAfter;
590591

591-
this.write(handle.flushFlag,
592-
this.buffer, // in
593-
handle.inOff, // in_off
594-
handle.availInBefore, // in_len
595-
self._outBuffer, // out
596-
self._outOffset, // out_off
597-
self._chunkSize); // out_len
592+
593+
if (!streamBufferIsFull) {
594+
this.write(handle.flushFlag,
595+
this.buffer, // in
596+
handle.inOff, // in_off
597+
handle.availInBefore, // in_len
598+
self._outBuffer, // out
599+
self._outOffset, // out_off
600+
self._chunkSize); // out_len
601+
} else {
602+
const oldRead = self._read;
603+
self._read = (n) => {
604+
self._read = oldRead;
605+
this.write(handle.flushFlag,
606+
this.buffer, // in
607+
handle.inOff, // in_off
608+
handle.availInBefore, // in_len
609+
self._outBuffer, // out
610+
self._outOffset, // out_off
611+
self._chunkSize); // out_len
612+
self._read(n);
613+
};
614+
}
598615
return;
599616
}
600617

0 commit comments

Comments
 (0)