On Tue, 9 Jan 2024 14:18:37 GMT, Jorn Vernee <jver...@openjdk.org> wrote:

> The issue with this test, and the test of JDK-8322324, seems to be that the 
> forked processes write to stderr/stdout, without this output being read 
> before the process terminates. The buffer might fill up if the output is not 
> being read, which means that the process will stall when writing (see stack 
> trace in JBS issue).
> 
> `OutputAnalyzer` has ways to prevent this by continuously reading from the 
> output streams in separate threads, but because the current code calls 
> `Process::waitFor` before creating the `OutputAnalyzer`, we never actually 
> read the written output of the fork, which occasionally results in a stall 
> and subsequent timeout.
> 
> The fix proposed by this patch is to use `ProcessTools::startProcess`, 
> instead of `ProcessBuilder::start`, which will also start the necessary 
> reader threads, preventing a stall. Incidentally, `startProcess` also has 
> built-in timeout handling which we can use.
> 
> Testing:
> -  500 runs of both java/foreign/TestStubAllocFailure.java and 
> java/foreign/critical/TestCriticalUpcall on various Windows x64 hosts (100 
> iterations was enough to observe the failure twice).
> -  `jdk_foreign` suite.

Marked as reviewed by mcimadamore (Reviewer).

-------------

PR Review: https://git.openjdk.org/jdk/pull/17324#pullrequestreview-1811623046

Reply via email to