diff --git a/spark-client/src/main/java/org/apache/hive/spark/client/SparkClientImpl.java b/spark-client/src/main/java/org/apache/hive/spark/client/SparkClientImpl.java index d4b63f0..c4495a9 100644 --- a/spark-client/src/main/java/org/apache/hive/spark/client/SparkClientImpl.java +++ b/spark-client/src/main/java/org/apache/hive/spark/client/SparkClientImpl.java @@ -46,6 +46,7 @@ import java.net.URL; import java.util.ArrayList; import java.util.Collections; +import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Properties; @@ -481,7 +482,7 @@ public void run() { final Process child = pb.start(); int childId = childIdGenerator.incrementAndGet(); - final List childErrorLog = new ArrayList(); + final List childErrorLog = Collections.synchronizedList(new ArrayList()); redirect("stdout-redir-" + childId, new Redirector(child.getInputStream())); redirect("stderr-redir-" + childId, new Redirector(child.getErrorStream(), childErrorLog)); @@ -492,9 +493,12 @@ public void run() { int exitCode = child.waitFor(); if (exitCode != 0) { StringBuilder errStr = new StringBuilder(); - for (String s : childErrorLog) { - errStr.append(s); - errStr.append('\n'); + synchronized(childErrorLog) { + Iterator iter = childErrorLog.iterator(); + while(iter.hasNext()){ + errStr.append(iter.next()); + errStr.append('\n'); + } } rpcServer.cancelClient(clientId,