From 8489bdbaeb07b18a736a438719adc8837c1908a0 Mon Sep 17 00:00:00 2001 From: Kevin van Zonneveld Date: Fri, 21 Aug 2009 17:54:10 +0200 Subject: [PATCH] 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 #.flush at #.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. --- src/http.js | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/http.js b/src/http.js index b59896a20..abf489095 100644 --- a/src/http.js +++ b/src/http.js @@ -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); }