@@ -156,36 +156,26 @@ namespace ts.server {
156
156
var logger = createLoggerFromEnv ( ) ;
157
157
158
158
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 ) ;
163
167
}
164
168
}
165
169
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
+ }
185
175
}
186
176
187
177
// 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 ) ;
189
179
190
180
var ioSession = new IOSession ( ts . sys , logger ) ;
191
181
process . on ( 'uncaughtException' , function ( err : Error ) {
0 commit comments