Browse Source

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
master
Conor MacNeill 22 years ago
parent
commit
2e26643d83
1 changed files with 33 additions and 13 deletions
  1. +33
    -13
      src/main/org/apache/tools/ant/taskdefs/optional/perforce/P4HandlerAdapter.java

+ 33
- 13
src/main/org/apache/tools/ant/taskdefs/optional/perforce/P4HandlerAdapter.java View File

@@ -1,7 +1,7 @@
/* /*
* The Apache Software License, Version 1.1 * 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. * reserved.
* *
* Redistribution and use in source and binary forms, with or without * 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 //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) { } catch (Exception e) {
throw new BuildException(e); throw new BuildException(e);
@@ -122,4 +114,32 @@ public abstract class P4HandlerAdapter implements P4Handler {


public void stop() { 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);
}
}

}
} }


Loading…
Cancel
Save