Skip to content

Commit

Permalink
Buggy connections could crash node.js. Now check connection before se…
Browse files Browse the repository at this point in the history
…nding data every time

http://groups.google.com/group/nodejs/browse_thread/thread/16abfa87c32408f3

We have our node.js server monitored by monit, however it seems monit is pretty
agressive / quick about closing its connection and thus we've gotten into a
loop of errors like this:

    at #<a ServerResponse>.flush
    at #<a ServerResponse>.sendBody
    at [object Object].json
    at [object Object].[anonymous]
    at [object Object].[anonymous]
    at [object Object].[anonymous]
http.js:353: Socket is not open for writing
      connection.send(out, out.encoding);
                 ^

Below is a patch that basically cause flushMessageQueue to check the connection
state for each item in the queue rather than just a single time in the
beginning.
  • Loading branch information
kvz authored and ry committed Aug 21, 2009
1 parent ed3602d commit 8489bdb
Showing 1 changed file with 3 additions and 4 deletions.
7 changes: 3 additions & 4 deletions src/http.js
Original file line number Diff line number Diff line change
Expand Up @@ -341,14 +341,13 @@ function createIncomingMessageStream (connection, incoming_listener) {
/* Returns true if the message queue is finished and the connection
* should be closed. */
function flushMessageQueue (connection, queue) {
if (connection.readyState !== "open" && connection.readyState !== "writeOnly") {
return false;
}

while (queue[0]) {
var message = queue[0];

while (message.output.length > 0) {
if (connection.readyState !== "open" && connection.readyState !== "writeOnly") {
return false;
}
var out = message.output.shift();
connection.send(out, out.encoding);
}
Expand Down

0 comments on commit 8489bdb

Please sign in to comment.