On Mon, 27 Feb 2023 17:55:40 GMT, Leonid Mesnik <lmes...@openjdk.org> wrote:

>> test/lib/jdk/test/lib/process/ProcessTools.java line 224:
>> 
>>> 222:                     if (!p.isAlive()) {
>>> 223:                         latch.countDown();
>>> 224:                         throw new RuntimeException("Started process " 
>>> + name + " is not alive.");
>> 
>> This seems problematic. The process has terminated but you don't know why - 
>> it may have completed normally and produced all the output such that the 
>> `await` below would return immediately with `true`, but you are now going to 
>> throw an exception. ???
>
> Thanks! You are right, we need to check first if the line has been printed.
> However, there is an interesting question the process can exit before streams 
> are read and the latch is set to zero. The documentation says that 
> linePredicate should detect if the process is warmed-up. So it is not 
> expected that it should exit right after the start.

Yes there remains a race, if the process exits but the streamPumper has not yet 
had the chance to call `countDown` then we would again throw the exception. 
Perhaps all we can do is give a little extra time after decting a dead process?

if (!p.isAlive()) {
  if (latch.getCount() > 0) {
    // Give some extra time for the StreamPumper to run after the process 
completed
   Thread.sleep(1000); 
   if (latch.getCount() > 0) {
    throw new RuntimeException("Started process " + name + " but it terminated 
without the expected output");
  }
}

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

PR: https://git.openjdk.org/jdk/pull/12751

Reply via email to