boundary conditions in blocking and non-blocking IO implementations

This commit is contained in:
Eugene Zhuravlev
2016-03-15 19:31:27 +01:00
parent 065ae0ec6b
commit 7009b79ea7
@@ -69,9 +69,11 @@ public abstract class BaseOutputReader extends BaseDataReader {
boolean read = false;
int n;
while (myReader.ready() && (n = myReader.read(myInputBuffer)) > 0) {
read = true;
processLine(myInputBuffer, myLineBuffer, n);
while (myReader.ready() && (n = myReader.read(myInputBuffer)) >= 0) {
if (n > 0) {
read = true;
processLine(myInputBuffer, myLineBuffer, n);
}
}
if (myLineBuffer.length() > 0) {
@@ -94,14 +96,17 @@ public abstract class BaseOutputReader extends BaseDataReader {
boolean read = false;
int n;
while ((n = myReader.read(myInputBuffer)) > 0) {
read = true;
processLine(myInputBuffer, myLineBuffer, n);
while ((n = myReader.read(myInputBuffer)) >= 0) {
if (n > 0) {
read = true;
processLine(myInputBuffer, myLineBuffer, n);
}
if (!myReader.ready()) {
TimeoutUtil.sleep(mySleepingPolicy.getTimeToSleep(true));
TimeoutUtil.sleep(mySleepingPolicy.getTimeToSleep(n > 0));
if (!myReader.ready()) {
if (myLineBuffer.length() > 0) sendLine(myLineBuffer);
if (myLineBuffer.length() > 0) {
sendLine(myLineBuffer);
}
onBufferExhaustion();
}
}