Skip to content

Commit 8a0d4f5

Browse files
author
Benjamin Pasero
committed
files - await writing to target stream to respect highWaterMark
1 parent 5d88f0d commit 8a0d4f5

2 files changed

Lines changed: 62 additions & 2 deletions

File tree

src/vs/base/test/common/stream.test.ts

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -179,6 +179,66 @@ suite('Stream', () => {
179179
assert.equal(consumedOrReadable, '1,2,3,4,5');
180180
});
181181

182+
test('peekReadable - error handling', async () => {
183+
184+
// 0 Chunks
185+
let stream = newWriteableStream(data => data);
186+
187+
let error: Error | undefined = undefined;
188+
let promise = (async () => {
189+
try {
190+
await peekStream(stream, 1);
191+
} catch (err) {
192+
error = err;
193+
}
194+
})();
195+
196+
stream.error(new Error());
197+
await promise;
198+
199+
assert.ok(error);
200+
201+
// 1 Chunk
202+
stream = newWriteableStream(data => data);
203+
204+
error = undefined;
205+
promise = (async () => {
206+
try {
207+
await peekStream(stream, 1);
208+
} catch (err) {
209+
error = err;
210+
}
211+
})();
212+
213+
stream.write('foo');
214+
stream.error(new Error());
215+
await promise;
216+
217+
assert.ok(error);
218+
219+
// 2 Chunks
220+
stream = newWriteableStream(data => data);
221+
222+
error = undefined;
223+
promise = (async () => {
224+
try {
225+
await peekStream(stream, 1);
226+
} catch (err) {
227+
error = err;
228+
}
229+
})();
230+
231+
stream.write('foo');
232+
stream.write('bar');
233+
stream.error(new Error());
234+
await promise;
235+
236+
assert.ok(!error);
237+
238+
stream.on('error', err => error = err);
239+
assert.ok(error);
240+
});
241+
182242
function arrayToReadable<T>(array: T[]): Readable<T> {
183243
return {
184244
read: () => array.shift() || null

src/vs/platform/files/common/io.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ async function doReadFileIntoStream<T>(provider: IFileSystemProviderWithOpenRead
8585

8686
// when buffer full, create a new one and emit it through stream
8787
if (posInBuffer === buffer.byteLength) {
88-
target.write(transformer(buffer));
88+
await target.write(transformer(buffer));
8989

9090
buffer = VSBuffer.alloc(Math.min(options.bufferSize, typeof allowedRemainingBytes === 'number' ? allowedRemainingBytes : options.bufferSize));
9191

@@ -100,7 +100,7 @@ async function doReadFileIntoStream<T>(provider: IFileSystemProviderWithOpenRead
100100
lastChunkLength = Math.min(posInBuffer, allowedRemainingBytes);
101101
}
102102

103-
target.write(transformer(buffer.slice(0, lastChunkLength)));
103+
await target.write(transformer(buffer.slice(0, lastChunkLength)));
104104
}
105105
} catch (error) {
106106
throw ensureFileSystemProviderError(error);

0 commit comments

Comments
 (0)