8173817: StackOverflowError in "process reaper" thread

Switch to inner class to avoid lambda stack overhead in ProcessReaper

Reviewed-by: dholmes, martin
This commit is contained in:
Roger Riggs 2017-08-22 09:41:58 -04:00
parent 312f813dbb
commit 9c6245db87

View File

@ -132,7 +132,9 @@ final class ProcessHandleImpl implements ProcessHandle {
// newCompletion has just been installed successfully
completion = newCompletion;
// spawn a thread to wait for and deliver the exit value
processReaperExecutor.execute(() -> {
processReaperExecutor.execute(new Runnable() {
// Use inner class to avoid lambda stack overhead
public void run() {
int exitValue = waitForProcessExit0(pid, shouldReap);
if (exitValue == NOT_A_CHILD) {
// pid not alive or not a child of this process
@ -160,6 +162,7 @@ final class ProcessHandleImpl implements ProcessHandle {
newCompletion.complete(exitValue);
// remove from cache afterwards
completions.remove(pid, newCompletion);
}
});
}
}