Browse Source

Buggy connections could crash node.js. Now check connection before sending 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.
v0.7.4-release
Kevin van Zonneveld 16 years ago
committed by Ryan
parent
commit
8489bdbaeb
  1. 7
      src/http.js

7
src/http.js

@ -341,14 +341,13 @@ function createIncomingMessageStream (connection, incoming_listener) {
/* Returns true if the message queue is finished and the connection /* Returns true if the message queue is finished and the connection
* should be closed. */ * should be closed. */
function flushMessageQueue (connection, queue) { function flushMessageQueue (connection, queue) {
if (connection.readyState !== "open" && connection.readyState !== "writeOnly") {
return false;
}
while (queue[0]) { while (queue[0]) {
var message = queue[0]; var message = queue[0];
while (message.output.length > 0) { while (message.output.length > 0) {
if (connection.readyState !== "open" && connection.readyState !== "writeOnly") {
return false;
}
var out = message.output.shift(); var out = message.output.shift();
connection.send(out, out.encoding); connection.send(out, out.encoding);
} }

Loading…
Cancel
Save