From 79cf3db41dbe8ff01463ed83437031e4d672d9f3 Mon Sep 17 00:00:00 2001 From: Alex Light Date: Mon, 26 Feb 2018 14:38:08 -0800 Subject: Make StreamRedirector try to exhaust itself before exiting The StreamRedirector would kill itself very eagerly. This meant that useful context was often lost. Change StreamRedirector to continue printing until it would need to pause to get more data. Test: Modify a test to timeout and run Test: ./art/tools/run-libjdwp-tests.sh --mode=host Bug: 69243589 Change-Id: I083983501fa49828b29009918e1de89732b41710 --- .../jpda/tests/framework/StreamRedirector.java | 32 ++++++++++++++-------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/framework/StreamRedirector.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/framework/StreamRedirector.java index 56fefee..ca2ebc0 100644 --- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/framework/StreamRedirector.java +++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/framework/StreamRedirector.java @@ -26,9 +26,9 @@ package org.apache.harmony.jpda.tests.framework; import java.io.InputStreamReader; -import java.io.BufferedReader; import java.io.InputStream; import java.io.IOException; +import java.io.Reader; /** *

This class provides redirection of debuggee output and error streams to logWriter. @@ -37,7 +37,7 @@ public class StreamRedirector extends Thread { String name; LogWriter logWriter; - BufferedReader br; + Reader br; boolean doExit; /** @@ -51,8 +51,7 @@ public class StreamRedirector extends Thread { super("Redirector for " + name); this.name = name; this.logWriter = logWriter; - InputStreamReader isr = new InputStreamReader(is); - br = new BufferedReader(isr, 1024); + br = new InputStreamReader(is); doExit = false; } @@ -63,19 +62,30 @@ public class StreamRedirector extends Thread { public void run() { logWriter.println("Redirector started: " + name); try { - String line = ""; - while (!doExit) { + StringBuilder cur = new StringBuilder(); + while (!doExit || br.ready()) { try { - line = br.readLine(); - if (line == null) + int nc = br.read(); + if (nc == -1) { + if (cur.length() != 0) { + logWriter.println(name + "> " + cur.toString()); + cur.setLength(0); + } break; - - logWriter.println(name + "> " + line); + } else if (nc == (int)'\n') { + logWriter.println(name + "> " + cur.toString()); + cur.setLength(0); + } else { + cur.appendCodePoint(nc); + } } catch (IllegalStateException e) { //logWriter.printError("Illegal state exception! " + e); //ignore } - + } + if (cur.length() != 0) { + logWriter.println(name + "> " + cur.toString()); + cur.setLength(0); } logWriter.println("Redirector completed: " + name); } catch (IOException e) { -- cgit v1.2.3