Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGreg Wilkins2013-08-30 04:37:43 +0000
committerGreg Wilkins2013-08-30 04:37:43 +0000
commit47c679dabb1ad3f77e9944e616aa61002474c83f (patch)
treeb9d323fc903a718068bc5f671bff7618faad6f8c /jetty-server/src/main/java/org
parent9bf83d427b6db72c62454b7e15cefbc6b637d961 (diff)
downloadorg.eclipse.jetty.project-47c679dabb1ad3f77e9944e616aa61002474c83f.tar.gz
org.eclipse.jetty.project-47c679dabb1ad3f77e9944e616aa61002474c83f.tar.xz
org.eclipse.jetty.project-47c679dabb1ad3f77e9944e616aa61002474c83f.zip
416102 - Clean up of async sendContent process
Diffstat (limited to 'jetty-server/src/main/java/org')
-rw-r--r--jetty-server/src/main/java/org/eclipse/jetty/server/HttpOutput.java42
-rw-r--r--jetty-server/src/main/java/org/eclipse/jetty/server/handler/ResourceHandler.java1
2 files changed, 15 insertions, 28 deletions
diff --git a/jetty-server/src/main/java/org/eclipse/jetty/server/HttpOutput.java b/jetty-server/src/main/java/org/eclipse/jetty/server/HttpOutput.java
index d12dee756c..db48bdbdac 100644
--- a/jetty-server/src/main/java/org/eclipse/jetty/server/HttpOutput.java
+++ b/jetty-server/src/main/java/org/eclipse/jetty/server/HttpOutput.java
@@ -420,6 +420,7 @@ public class HttpOutput extends ServletOutputStream
ReadableByteChannel rbc=httpContent.getReadableByteChannel();
if (rbc!=null)
{
+ // Close of the rbc is done by the async sendContent
sendContent(rbc,callback);
return;
}
@@ -475,6 +476,8 @@ public class HttpOutput extends ServletOutputStream
@Override
protected boolean process() throws Exception
{
+ // Only return if EOF has previously been read and thus
+ // a write done with EOF=true
if (_eof)
{
// Handle EOF
@@ -484,21 +487,15 @@ public class HttpOutput extends ServletOutputStream
return true;
}
- int len=_in.read(_buffer.array(),0,_buffer.capacity());
-
- if (len<0)
- {
- _eof=true;
- len=0;
- }
- else if (len<_buffer.capacity())
+ // Read until buffer full or EOF
+ int len=0;
+ while (len<_buffer.capacity() && !_eof)
{
- // read ahead for EOF to try for single commit
- int len2=_in.read(_buffer.array(),len,_buffer.capacity()-len);
- if (len2<0)
+ int r=_in.read(_buffer.array(),0,_buffer.capacity()-len);
+ if (r<0)
_eof=true;
else
- len+=len2;
+ len+=r;
}
// write what we have
@@ -550,6 +547,8 @@ public class HttpOutput extends ServletOutputStream
@Override
protected boolean process() throws Exception
{
+ // Only return if EOF has previously been read and thus
+ // a write done with EOF=true
if (_eof)
{
_in.close();
@@ -558,23 +557,10 @@ public class HttpOutput extends ServletOutputStream
return true;
}
+ // Read from stream until buffer full or EOF
_buffer.clear();
- int len=_in.read(_buffer);
-
- if (len<0)
- {
- _eof=true;
- len=0;
- }
- else if (len<_buffer.capacity())
- {
- // read ahead for EOF to try for single commit
- int len2=_in.read(_buffer);
- if (len2<0)
- _eof=true;
- else
- len+=len2;
- }
+ while (_buffer.hasRemaining() && !_eof)
+ _eof = (_in.read(_buffer)) < 0;
// write what we have
_buffer.flip();
diff --git a/jetty-server/src/main/java/org/eclipse/jetty/server/handler/ResourceHandler.java b/jetty-server/src/main/java/org/eclipse/jetty/server/handler/ResourceHandler.java
index c2eb255dce..f3bc5df507 100644
--- a/jetty-server/src/main/java/org/eclipse/jetty/server/handler/ResourceHandler.java
+++ b/jetty-server/src/main/java/org/eclipse/jetty/server/handler/ResourceHandler.java
@@ -538,6 +538,7 @@ public class ResourceHandler extends HandlerWrapper
}
else // Do a blocking write of a channel (if available) or input stream
{
+ // Close of the channel/inputstream is done by the async sendContent
ReadableByteChannel channel= resource.getReadableByteChannel();
if (channel!=null)
((HttpOutput)out).sendContent(channel,callback);

Back to the top