diff options
author | Greg Wilkins | 2015-07-22 03:11:40 +0000 |
---|---|---|
committer | Greg Wilkins | 2015-07-22 03:11:40 +0000 |
commit | bcc976312d6c097b8f789bf5d2fc1ebe66cb602c (patch) | |
tree | a2bf34eb38edabfd839f296086f9fa3bb1fc8aae | |
parent | 232b4a46803ae2efbceafb01699e51d70390ecb8 (diff) | |
download | org.eclipse.jetty.project-bcc976312d6c097b8f789bf5d2fc1ebe66cb602c.tar.gz org.eclipse.jetty.project-bcc976312d6c097b8f789bf5d2fc1ebe66cb602c.tar.xz org.eclipse.jetty.project-bcc976312d6c097b8f789bf5d2fc1ebe66cb602c.zip |
473243 Delay resource close for async default content
-rw-r--r-- | jetty-servlet/src/main/java/org/eclipse/jetty/servlet/DefaultServlet.java | 33 |
1 files changed, 19 insertions, 14 deletions
diff --git a/jetty-servlet/src/main/java/org/eclipse/jetty/servlet/DefaultServlet.java b/jetty-servlet/src/main/java/org/eclipse/jetty/servlet/DefaultServlet.java index 04ae26a139..56df44c2de 100644 --- a/jetty-servlet/src/main/java/org/eclipse/jetty/servlet/DefaultServlet.java +++ b/jetty-servlet/src/main/java/org/eclipse/jetty/servlet/DefaultServlet.java @@ -453,6 +453,7 @@ public class DefaultServlet extends HttpServlet implements ResourceFactory // Find the resource and content Resource resource=null; HttpContent content=null; + boolean close_content=true; try { // is gzip enabled? @@ -530,7 +531,7 @@ public class DefaultServlet extends HttpServlet implements ResourceFactory if (mt!=null) response.setContentType(mt); } - sendData(request,response,included.booleanValue(),resource,content,reqRanges); + close_content=sendData(request,response,included.booleanValue(),resource,content,reqRanges); } } } @@ -605,10 +606,13 @@ public class DefaultServlet extends HttpServlet implements ResourceFactory } finally { - if (content!=null) - content.release(); - else if (resource!=null) - resource.close(); + if (close_content) + { + if (content!=null) + content.release(); + else if (resource!=null) + resource.close(); + } } } @@ -856,11 +860,11 @@ public class DefaultServlet extends HttpServlet implements ResourceFactory } /* ------------------------------------------------------------ */ - protected void sendData(HttpServletRequest request, + protected boolean sendData(HttpServletRequest request, HttpServletResponse response, boolean include, Resource resource, - HttpContent content, + final HttpContent content, Enumeration<String> reqRanges) throws IOException { @@ -930,6 +934,7 @@ public class DefaultServlet extends HttpServlet implements ResourceFactory public void succeeded() { context.complete(); + content.release(); } @Override @@ -940,6 +945,7 @@ public class DefaultServlet extends HttpServlet implements ResourceFactory else LOG.warn(x); context.complete(); + content.release(); } @Override @@ -948,12 +954,11 @@ public class DefaultServlet extends HttpServlet implements ResourceFactory return String.format("DefaultServlet@%x$CB", DefaultServlet.this.hashCode()); } }); + return false; } // otherwise write content blocking - else - { - ((HttpOutput)out).sendContent(content); - } + ((HttpOutput)out).sendContent(content); + } } else @@ -969,7 +974,7 @@ public class DefaultServlet extends HttpServlet implements ResourceFactory response.setHeader(HttpHeader.CONTENT_RANGE.asString(), InclusiveByteRange.to416HeaderRangeString(content_length)); resource.writeTo(out,0,content_length); - return; + return true; } // if there is only a single valid range (must be satisfiable @@ -985,7 +990,7 @@ public class DefaultServlet extends HttpServlet implements ResourceFactory response.setHeader(HttpHeader.CONTENT_RANGE.asString(), singleSatisfiableRange.toHeaderRangeString(content_length)); resource.writeTo(out,singleSatisfiableRange.getFirst(content_length),singleLength); - return; + return true; } // multiple non-overlapping valid ranges cause a multipart @@ -1065,7 +1070,7 @@ public class DefaultServlet extends HttpServlet implements ResourceFactory in.close(); multi.close(); } - return; + return true; } /* ------------------------------------------------------------ */ |