Skip to content

Commit 847a074

Browse files
committed
Merge pull request #5408 from Microsoft/asyncWriteOnServer
use process.stdout.write on server instead of fs.write
2 parents 33d7a1f + 41697b9 commit 847a074

File tree

1 file changed

+14
-24
lines changed

1 file changed

+14
-24
lines changed

src/server/server.ts

Lines changed: 14 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -156,36 +156,26 @@ namespace ts.server {
156156
var logger = createLoggerFromEnv();
157157

158158
let pending: string[] = [];
159-
function queueMessage(s: string) {
160-
pending.push(s);
161-
if (pending.length === 1) {
162-
drain();
159+
let canWrite = true;
160+
function writeMessage(s: string) {
161+
if (!canWrite) {
162+
pending.push(s);
163+
}
164+
else {
165+
canWrite = false;
166+
process.stdout.write(new Buffer(s, "utf8"), setCanWriteFlagAndWriteMessageIfNecessary);
163167
}
164168
}
165169

166-
function drain() {
167-
Debug.assert(pending.length > 0);
168-
writeBuffer(new Buffer(pending[0], "utf8"), 0);
169-
}
170-
171-
function writeBuffer(buffer: Buffer, offset: number) {
172-
const toWrite = buffer.length - offset;
173-
fs.write(1, buffer, offset, toWrite, undefined, (err, written, buffer) => {
174-
if (toWrite > written) {
175-
writeBuffer(buffer, offset + written);
176-
}
177-
else {
178-
Debug.assert(pending.length > 0);
179-
pending.shift();
180-
if (pending.length > 0) {
181-
drain();
182-
}
183-
}
184-
});
170+
function setCanWriteFlagAndWriteMessageIfNecessary() {
171+
canWrite = true;
172+
if (pending.length) {
173+
writeMessage(pending.shift());
174+
}
185175
}
186176

187177
// Override sys.write because fs.writeSync is not reliable on Node 4
188-
ts.sys.write = (s: string) => queueMessage(s);
178+
ts.sys.write = (s: string) => writeMessage(s);
189179

190180
var ioSession = new IOSession(ts.sys, logger);
191181
process.on('uncaughtException', function(err: Error) {

0 commit comments

Comments
 (0)