From 7009b79ea7acd005a04f0d9dc8c04561669ccd56 Mon Sep 17 00:00:00 2001 From: Eugene Zhuravlev Date: Tue, 15 Mar 2016 19:21:41 +0100 Subject: [PATCH] boundary conditions in blocking and non-blocking IO implementations --- .../intellij/util/io/BaseOutputReader.java | 23 +++++++++++-------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/platform/util/src/com/intellij/util/io/BaseOutputReader.java b/platform/util/src/com/intellij/util/io/BaseOutputReader.java index 3ea03198d666..9c810b674efa 100644 --- a/platform/util/src/com/intellij/util/io/BaseOutputReader.java +++ b/platform/util/src/com/intellij/util/io/BaseOutputReader.java @@ -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(); } }