On Wed, Mar 14, 2012 at 10:46, Jorge <[email protected]> wrote: >> From: Jorge Chamorro Bieling <[email protected]> >> Date: March 14, 2012 12:08:48 AM GMT+01:00 >> To: Isaac Schlueter <[email protected]> >> Subject: Re: Now a simple control-S in the terminal can grind to a halt any >> node.js server. >> On Mar 13, 2012, at 11:56 PM, Isaac Schlueter wrote: >>> >>> On Tue, Mar 13, 2012 at 15:04, Jorge Chamorro Bieling <[email protected]> >>> wrote: >>>> Because now, it seems, that write()ing to stdout is blocking... >>>> >>>> For example: >>>> >>>> 1.- paste this in a shell: >>>> >>>> node << EOF >>>> require('http').createServer(function(req, res) { >>>> res.end("FAST"); >>>> process.stdout.write('.'); >>>> }).listen(8000); >>>> EOF >>>> >>>> >>>> 2.- and hit control-S >>>> >>>> 3.- then do an `ab -t 2 http://127.0.0.1:8000` in another shell, and all >>>> you'll get is : >>>> >>>> apr_poll: The timeout specified has expired (70007) >>>> >>>> Why? Because the node server is totally blocked by the control-S! >>>> >>>> Are you aware of that ? >>>> Isn't that something to be concerned about ? >>>> Why did you change write()ing to stdout to blocking ? >> >>> This API change was made quite some time ago. It prevents a lot of >>> confusion and edge-case bugs. >>> >>> If it causes problems for you, please bring it up on the >>> [email protected] mailing list, where API changes can be >>> discussed and explored from multiple angles. >>> >>> In the meantime, I would not recommend writing to stdout on every >>> request if it might be blocked. >> >> Isaac, >> >> It would be equally frozen whether it wrote on every request or just once. > > A warning, a message, anything, just a single char written to stdout could > now freeze a node.js server.
The stress is on 'could' , it depends on your terminal settings. v0.6 has been out for months now and no one complained so I doubt that it's really an issue (then again, maybe no one bothered to report it). It's trivial to work around, either disable control characters altogether with `stty -isig -ixon -ixoff` (also disables ^C) or selectively with `stty kill "" stop "" susp "" quit ""`.
