@@ -156,36 +156,24 @@ 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 ( ) ;
163- }
164- }
165-
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 ( ) ;
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" ) , ( ) => {
167+ canWrite = true ;
168+ if ( pending . length ) {
169+ writeMessage ( pending . shift ( ) ) ;
182170 }
183- }
184- } ) ;
171+ } )
172+ }
185173 }
186174
187175 // Override sys.write because fs.writeSync is not reliable on Node 4
188- ts . sys . write = ( s : string ) => queueMessage ( s ) ;
176+ ts . sys . write = ( s : string ) => writeMessage ( s ) ;
189177
190178 var ioSession = new IOSession ( ts . sys , logger ) ;
191179 process . on ( 'uncaughtException' , function ( err : Error ) {
0 commit comments