diff options
author | Greg Wilkins | 2015-02-05 03:27:05 +0000 |
---|---|---|
committer | Greg Wilkins | 2015-02-05 03:27:05 +0000 |
commit | d08fced01065292ea1e48f6d81ac0fcfa5553887 (patch) | |
tree | 3b27b2ee1f20f9403ef87f364a102046f6c7bfe2 | |
parent | 1576c68a529cee00a02e6a4c80528d0f0d631f53 (diff) | |
download | org.eclipse.jetty.project-d08fced01065292ea1e48f6d81ac0fcfa5553887.tar.gz org.eclipse.jetty.project-d08fced01065292ea1e48f6d81ac0fcfa5553887.tar.xz org.eclipse.jetty.project-d08fced01065292ea1e48f6d81ac0fcfa5553887.zip |
handle slow arriving input
-rw-r--r-- | jetty-server/src/main/java/org/eclipse/jetty/server/HttpInput.java | 29 |
1 files changed, 21 insertions, 8 deletions
diff --git a/jetty-server/src/main/java/org/eclipse/jetty/server/HttpInput.java b/jetty-server/src/main/java/org/eclipse/jetty/server/HttpInput.java index ece4ce7bc0..b1cb67f985 100644 --- a/jetty-server/src/main/java/org/eclipse/jetty/server/HttpInput.java +++ b/jetty-server/src/main/java/org/eclipse/jetty/server/HttpInput.java @@ -365,16 +365,29 @@ public abstract class HttpInput<T> extends ServletInputStream implements Runnabl @Override public void setReadListener(ReadListener readListener) { - readListener = Objects.requireNonNull(readListener); - synchronized (lock()) + try { - if (_contentState != STREAM) - throw new IllegalStateException("state=" + _contentState); - _contentState = ASYNC; - _listener = readListener; - _notReady = true; + readListener = Objects.requireNonNull(readListener); + boolean content; + synchronized (lock()) + { + if (_contentState != STREAM) + throw new IllegalStateException("state=" + _contentState); + _contentState = ASYNC; + _listener = readListener; + _notReady = true; + + content = getNextContent()!=null; + } + if (content) + _channelState.onReadPossible(); + else + unready(); + } + catch(IOException e) + { + throw new RuntimeIOException(e); } - _channelState.onReadPossible(); } public void failed(Throwable x) |