Fix flushSync() to fire onWriteParsed
flushSync() processes pending writes synchronously (e.g. during CoreTerminal.resize()) but did not emit onWriteParsed, unlike the async _innerWrite path. Addons listening for parse completion could miss updates after resize. Fixes #5912 Co-authored-by: Daniel Imms <Tyriar@users.noreply.github.com>
This commit is contained in:
co-authored by
Daniel Imms
parent
c62e6dd765
commit
306c3d73ec
@@ -125,5 +125,20 @@ describe('WriteBuffer', () => {
|
|||||||
assert.deepEqual(stack, []);
|
assert.deepEqual(stack, []);
|
||||||
assert.deepEqual(cbStack, []);
|
assert.deepEqual(cbStack, []);
|
||||||
});
|
});
|
||||||
|
it('flushSync fires onWriteParsed', () => {
|
||||||
|
let parsed = 0;
|
||||||
|
wb.onWriteParsed(() => parsed++);
|
||||||
|
wb.write('a');
|
||||||
|
wb.write('b');
|
||||||
|
assert.equal(parsed, 0);
|
||||||
|
wb.flushSync();
|
||||||
|
assert.equal(parsed, 1);
|
||||||
|
});
|
||||||
|
it('flushSync with no pending writes does not fire onWriteParsed', () => {
|
||||||
|
let parsed = 0;
|
||||||
|
wb.onWriteParsed(() => parsed++);
|
||||||
|
wb.flushSync();
|
||||||
|
assert.equal(parsed, 0);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -71,7 +71,9 @@ export class WriteBuffer extends Disposable {
|
|||||||
|
|
||||||
// Process all pending chunks synchronously
|
// Process all pending chunks synchronously
|
||||||
let chunk: string | Uint8Array | undefined;
|
let chunk: string | Uint8Array | undefined;
|
||||||
|
let didProcess = false;
|
||||||
while (chunk = this._writeBuffer.shift()) {
|
while (chunk = this._writeBuffer.shift()) {
|
||||||
|
didProcess = true;
|
||||||
this._action(chunk);
|
this._action(chunk);
|
||||||
const cb = this._callbacks.shift();
|
const cb = this._callbacks.shift();
|
||||||
if (cb) cb();
|
if (cb) cb();
|
||||||
@@ -84,6 +86,9 @@ export class WriteBuffer extends Disposable {
|
|||||||
this._callbacks.length = 0;
|
this._callbacks.length = 0;
|
||||||
|
|
||||||
this._isSyncWriting = false;
|
this._isSyncWriting = false;
|
||||||
|
if (didProcess) {
|
||||||
|
this._onWriteParsed.fire();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
Reference in New Issue
Block a user