343923 flush timeouts applied to outer loop
git-svn-id: svn+ssh://dev.eclipse.org/svnroot/rt/org.eclipse.jetty/jetty/trunk@3034 7e9141cc-0065-0410-87d8-b60c137991c4
This commit is contained in:
parent
3b6dd2778b
commit
7227f8c6bb
|
@ -6,6 +6,7 @@ jetty-7.4.1-SNAPSHOT
|
|||
+ 343567 HttpClient does not limit the destination's exchange queue
|
||||
+ 343707 'REQUEST' is printed on console for each incoming HTTP request
|
||||
+ 343482 refactored overlay deployer layout to use WAR layout
|
||||
+ 343923 flush timeouts applied to outer loop
|
||||
|
||||
jetty-7.4.0.v20110414
|
||||
+ 342504 Scanner Listener
|
||||
|
|
|
@ -424,22 +424,28 @@ public abstract class AbstractGenerator implements Generator
|
|||
public void flush(long maxIdleTime) throws IOException
|
||||
{
|
||||
// block until everything is flushed
|
||||
long now=System.currentTimeMillis();
|
||||
long end=now+maxIdleTime;
|
||||
Buffer content = _content;
|
||||
Buffer buffer = _buffer;
|
||||
if (content!=null && content.length()>0 || buffer!=null && buffer.length()>0 || isBufferFull())
|
||||
{
|
||||
flushBuffer();
|
||||
|
||||
while ((content!=null && content.length()>0 ||buffer!=null && buffer.length()>0) && _endp.isOpen())
|
||||
blockForOutput(maxIdleTime);
|
||||
while (now<end && (content!=null && content.length()>0 ||buffer!=null && buffer.length()>0) && _endp.isOpen())
|
||||
{
|
||||
blockForOutput(end-now);
|
||||
now=System.currentTimeMillis();
|
||||
}
|
||||
}
|
||||
|
||||
// make sure buffered data is also flushed
|
||||
while (_endp.isBufferingOutput() && _endp.isOpen())
|
||||
while (now<end && _endp.isBufferingOutput() && _endp.isOpen())
|
||||
{
|
||||
if (!_endp.isBlocking())
|
||||
_endp.blockWritable(maxIdleTime);
|
||||
_endp.blockWritable(end-now);
|
||||
_endp.flush();
|
||||
now=System.currentTimeMillis();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -354,7 +354,8 @@ public class SelectChannelEndPoint extends ChannelEndPoint implements AsyncEndPo
|
|||
{
|
||||
synchronized (this)
|
||||
{
|
||||
long start=_selectSet.getNow();
|
||||
long now=_selectSet.getNow();
|
||||
long end=now+timeoutMs;
|
||||
try
|
||||
{
|
||||
_writeBlocked=true;
|
||||
|
@ -363,15 +364,17 @@ public class SelectChannelEndPoint extends ChannelEndPoint implements AsyncEndPo
|
|||
try
|
||||
{
|
||||
updateKey();
|
||||
this.wait(timeoutMs);
|
||||
this.wait(end-now);
|
||||
}
|
||||
catch (InterruptedException e)
|
||||
{
|
||||
Log.warn(e);
|
||||
}
|
||||
|
||||
timeoutMs -= _selectSet.getNow()-start;
|
||||
if (_writeBlocked && timeoutMs<=0)
|
||||
finally
|
||||
{
|
||||
now=_selectSet.getNow();
|
||||
}
|
||||
if (_writeBlocked && now>=end)
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue