Remove signal handling race condition from RunProcess

Fixes #1061
This commit is contained in:
Andy Wilkinson 2014-06-09 21:29:33 +01:00
parent 0b7836b447
commit 02de6e3531
1 changed files with 6 additions and 9 deletions

View File

@ -30,6 +30,7 @@ import org.springframework.util.ReflectionUtils;
* *
* @author Phillip Webb * @author Phillip Webb
* @author Dave Syer * @author Dave Syer
* @author Andy Wilkinson
* @since 1.1.0 * @since 1.1.0
*/ */
public class RunProcess { public class RunProcess {
@ -59,9 +60,10 @@ public class RunProcess {
builder.redirectErrorStream(true); builder.redirectErrorStream(true);
boolean inheritedIO = inheritIO(builder); boolean inheritedIO = inheritIO(builder);
try { try {
this.process = builder.start(); Process process = builder.start();
this.process = process;
if (!inheritedIO) { if (!inheritedIO) {
redirectOutput(this.process); redirectOutput(process);
} }
SignalUtils.attachSignalHandler(new Runnable() { SignalUtils.attachSignalHandler(new Runnable() {
@Override @Override
@ -70,15 +72,10 @@ public class RunProcess {
} }
}); });
try { try {
this.process.waitFor(); return process.waitFor();
} }
catch (InterruptedException ex) { catch (InterruptedException ex) {
Thread.currentThread().interrupt(); Thread.currentThread().interrupt();
}
try {
return this.process.exitValue();
}
catch (IllegalThreadStateException e) {
return 1; return 1;
} }
} }