From 2e26643d83cba15bf62ece08ebf6117ba231aeb6 Mon Sep 17 00:00:00 2001 From: Conor MacNeill Date: Sat, 1 Feb 2003 05:09:17 +0000 Subject: [PATCH] Avoid perforce task lockup when only output on stderr PR: 16544 Submitted by: Antoine Levy-Lambert git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@273945 13f79535-47bb-0310-9956-ffa450edef68 --- .../optional/perforce/P4HandlerAdapter.java | 46 +++++++++++++------ 1 file changed, 33 insertions(+), 13 deletions(-) diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/perforce/P4HandlerAdapter.java b/src/main/org/apache/tools/ant/taskdefs/optional/perforce/P4HandlerAdapter.java index 6aecf82e1..fd7b42478 100644 --- a/src/main/org/apache/tools/ant/taskdefs/optional/perforce/P4HandlerAdapter.java +++ b/src/main/org/apache/tools/ant/taskdefs/optional/perforce/P4HandlerAdapter.java @@ -1,7 +1,7 @@ /* * The Apache Software License, Version 1.1 * - * Copyright (c) 2001-2002 The Apache Software Foundation. All rights + * Copyright (c) 2001-2003 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without @@ -86,18 +86,10 @@ public abstract class P4HandlerAdapter implements P4Handler { } //Now read any input and process - - BufferedReader input = new BufferedReader( - new InputStreamReader( - new SequenceInputStream(is, es))); - - String line; - while ((line = input.readLine()) != null) { - process(line); - } - - input.close(); - + Thread output = new Thread(new Reader(is)); + Thread error = new Thread(new Reader(es)); + output.start(); + error.start(); } catch (Exception e) { throw new BuildException(e); @@ -122,4 +114,32 @@ public abstract class P4HandlerAdapter implements P4Handler { public void stop() { } + public class Reader implements Runnable { + protected InputStream mystream; + public Reader(InputStream is) + { + mystream=is; + } + public void setStream(InputStream is) { + mystream=is; + } + public void run() { + BufferedReader input = new BufferedReader( + new InputStreamReader(mystream)); + + String line; + try { + while ((line = input.readLine()) != null) { + synchronized (this){ + process(line); + } + } + } + catch (Exception e) { + throw new BuildException(e); + } + } + + } } +