HADOOP-15512. Clean up Shell from JDK7 workarounds.

Contributed by Zsolt Venczel.
This commit is contained in:
Steve Loughran 2018-06-07 15:55:49 +01:00
parent 58bc34f1e3
commit f494f0b896
No known key found for this signature in database
GPG Key ID: D22CF846DBB162A0
1 changed files with 2 additions and 16 deletions

View File

@ -22,7 +22,6 @@ import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.InputStream;
import java.io.InterruptedIOException;
import java.nio.charset.Charset;
import java.util.Arrays;
@ -1018,17 +1017,7 @@ public abstract class Shell {
}
// close the input stream
try {
// JDK 7 tries to automatically drain the input streams for us
// when the process exits, but since close is not synchronized,
// it creates a race if we close the stream first and the same
// fd is recycled. the stream draining thread will attempt to
// drain that fd!! it may block, OOM, or cause bizarre behavior
// see: https://bugs.openjdk.java.net/browse/JDK-8024521
// issue is fixed in build 7u60
InputStream stdout = process.getInputStream();
synchronized (stdout) {
inReader.close();
}
inReader.close();
} catch (IOException ioe) {
LOG.warn("Error while closing the input stream", ioe);
}
@ -1037,10 +1026,7 @@ public abstract class Shell {
joinThread(errThread);
}
try {
InputStream stderr = process.getErrorStream();
synchronized (stderr) {
errReader.close();
}
errReader.close();
} catch (IOException ioe) {
LOG.warn("Error while closing the error stream", ioe);
}