# HG changeset patch # User cli # Date 1261752166 -3600 # Node ID dd05c3f2fa24cdaf391f4a46d367a27fe0376e49 # Parent 2ff819fa5be1dff181c126cc2a32ed73bf32765e Fix for too early disconnects on slow client connections. (#563) diff -r 2ff819fa5be1 -r dd05c3f2fa24 org/sonews/daemon/ChannelLineBuffers.java --- a/org/sonews/daemon/ChannelLineBuffers.java Wed Aug 26 17:04:04 2009 +0200 +++ b/org/sonews/daemon/ChannelLineBuffers.java Fri Dec 25 15:42:46 2009 +0100 @@ -124,6 +124,18 @@ } } } + + /** + * @return false if there are output buffers pending to be written to the + * client. + */ + boolean isOutputBufferEmpty() + { + synchronized(outputBuffers) + { + return outputBuffers.isEmpty(); + } + } /** * Goes through the input buffer of the given channel and searches diff -r 2ff819fa5be1 -r dd05c3f2fa24 org/sonews/daemon/ChannelWriter.java --- a/org/sonews/daemon/ChannelWriter.java Wed Aug 26 17:04:04 2009 +0200 +++ b/org/sonews/daemon/ChannelWriter.java Fri Dec 25 15:42:46 2009 +0100 @@ -169,6 +169,9 @@ // events until we have something to write to the socket channel //selKey.cancel(); selKey.interestOps(0); + // Update activity timestamp to prevent too early disconnects + // on slow client connections + connection.setLastActivity(System.currentTimeMillis()); return; } diff -r 2ff819fa5be1 -r dd05c3f2fa24 org/sonews/daemon/Connections.java --- a/org/sonews/daemon/Connections.java Wed Aug 26 17:04:04 2009 +0200 +++ b/org/sonews/daemon/Connections.java Fri Dec 25 15:42:46 2009 +0100 @@ -134,7 +134,8 @@ while (iter.hasNext()) { conn = iter.next(); - if((System.currentTimeMillis() - conn.getLastActivity()) > timeoutMillis) + if((System.currentTimeMillis() - conn.getLastActivity()) > timeoutMillis + && conn.getBuffers().isOutputBufferEmpty()) { // A connection timeout has occurred so purge the connection iter.remove(); diff -r 2ff819fa5be1 -r dd05c3f2fa24 org/sonews/daemon/NNTPConnection.java --- a/org/sonews/daemon/NNTPConnection.java Wed Aug 26 17:04:04 2009 +0200 +++ b/org/sonews/daemon/NNTPConnection.java Fri Dec 25 15:42:46 2009 +0100 @@ -18,7 +18,6 @@ package org.sonews.daemon; -import org.sonews.util.Log; import java.io.IOException; import java.net.InetSocketAddress; import java.net.SocketException; @@ -34,6 +33,7 @@ import org.sonews.daemon.command.Command; import org.sonews.storage.Article; import org.sonews.storage.Channel; +import org.sonews.util.Log; import org.sonews.util.Stats; /** @@ -408,5 +408,10 @@ { this.charset = charset; } + + void setLastActivity(long timestamp) + { + this.lastActivity = timestamp; + } } diff -r 2ff819fa5be1 -r dd05c3f2fa24 org/sonews/storage/impl/JDBCDatabase.java --- a/org/sonews/storage/impl/JDBCDatabase.java Wed Aug 26 17:04:04 2009 +0200 +++ b/org/sonews/storage/impl/JDBCDatabase.java Fri Dec 25 15:42:46 2009 +0100 @@ -1752,6 +1752,7 @@ // INSERT INTO headers ... // SELECT * FROM postings WHERE article_id = ? AND group_id = ? + return false; } /**