Restore handling of 0 bytes read

Issue: SPR-16728
This commit is contained in:
Rossen Stoyanchev 2018-04-16 09:59:34 -04:00
parent 0754833b37
commit 551505bd93
2 changed files with 9 additions and 6 deletions

View File

@ -320,7 +320,8 @@ public abstract class AbstractListenerReadPublisher<T> implements Publisher<T> {
<T> void onDataAvailable(AbstractListenerReadPublisher<T> publisher) {
if (publisher.changeState(this, READING)) {
try {
boolean demandAvailable = publisher.readAndPublish();
boolean demandAvailable = publisher.
readAndPublish();
if (demandAvailable) {
publisher.changeToDemandState(READING);
}

View File

@ -198,6 +198,8 @@ class ServletServerHttpRequest extends AbstractServerHttpRequest {
/**
* Read from the request body InputStream and return a DataBuffer.
* Invoked only when {@link ServletInputStream#isReady()} returns "true".
* @return a DataBuffer with data read, or {@link #EOF_BUFFER} if the input
* stream returned -1, or null if 0 bytes were read.
*/
@Nullable
DataBuffer readFromInputStream() throws IOException {
@ -211,7 +213,8 @@ class ServletServerHttpRequest extends AbstractServerHttpRequest {
dataBuffer.write(this.buffer, 0, read);
return dataBuffer;
}
else if (read == -1) {
if (read == -1) {
return EOF_BUFFER;
}
@ -273,13 +276,12 @@ class ServletServerHttpRequest extends AbstractServerHttpRequest {
protected DataBuffer read() throws IOException {
if (this.inputStream.isReady()) {
DataBuffer dataBuffer = readFromInputStream();
if (dataBuffer != EOF_BUFFER) {
return dataBuffer;
}
else {
if (dataBuffer == EOF_BUFFER) {
// No need to wait for container callback...
onAllDataRead();
dataBuffer = null;
}
return dataBuffer;
}
return null;
}