diff options
author | Greg Wilkins | 2013-08-30 04:37:43 +0000 |
---|---|---|
committer | Greg Wilkins | 2013-08-30 04:37:43 +0000 |
commit | 47c679dabb1ad3f77e9944e616aa61002474c83f (patch) | |
tree | b9d323fc903a718068bc5f671bff7618faad6f8c /jetty-server/src/main/java/org | |
parent | 9bf83d427b6db72c62454b7e15cefbc6b637d961 (diff) | |
download | org.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.java | 42 | ||||
-rw-r--r-- | jetty-server/src/main/java/org/eclipse/jetty/server/handler/ResourceHandler.java | 1 |
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); |