From 7ac29e83087f62a339deb60efd3a1b033886077d Mon Sep 17 00:00:00 2001 From: Stefan Anzinger <stefan.anzinger@oracle.com> Date: Mon, 25 Apr 2016 16:16:01 +0200 Subject: [PATCH] Handle output of package install correctly to avoid the process to block --- .../r/test/rpackages/TestRPackages.java | 33 ++++++++++--------- 1 file changed, 17 insertions(+), 16 deletions(-) diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/rpackages/TestRPackages.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/rpackages/TestRPackages.java index 5d453173ce..94d8505d71 100644 --- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/rpackages/TestRPackages.java +++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/rpackages/TestRPackages.java @@ -96,26 +96,27 @@ public abstract class TestRPackages extends TestBase { if (FastROptions.debugMatches("TestRPackages")) { pb.inheritIO(); } + pb.redirectErrorStream(true); Process install = pb.start(); + BufferedReader out = new BufferedReader(new InputStreamReader(install.getInputStream(), StandardCharsets.UTF_8)); + StringBuilder str = new StringBuilder(); + try { + String line; + while ((line = out.readLine()) != null) { + str.append(line).append('\n'); + if (str.length() > 10 * (1 << 20)) { // if larger than 10M (just in case) + System.out.println(str); + str.setLength(0); // Reset buffer + } + } + } catch (IOException e) { + e.printStackTrace(); + } int rc = install.waitFor(); if (rc == 0) { - return true; + return true; // Ignore output of process on success } else { - BufferedReader out = new BufferedReader(new InputStreamReader(install.getInputStream(), StandardCharsets.UTF_8)); - BufferedReader err = new BufferedReader(new InputStreamReader(install.getErrorStream(), StandardCharsets.UTF_8)); - try { - StringBuilder str = new StringBuilder(); - String line; - while ((line = out.readLine()) != null) { - str.append(line).append('\n'); - } - while ((line = err.readLine()) != null) { - str.append(line).append('\n'); - } - System.out.println(str); - } catch (IOException e) { - e.printStackTrace(); - } + System.out.println(str); // Print if error happened return false; } } catch (Exception ex) { -- GitLab