On Wed, 6 Aug 2025 15:46:18 GMT, Roger Riggs <rri...@openjdk.org> wrote:

>>> Can we simply restore the interrupt after destroy()?
>> 
>> That's the suggestion... but now I'm thinking the correct solution here is 
>> to just have `close()` declared to throw `InterruptedException` and not 
>> catch anything. Then we are leaving it up to the caller to decide what to 
>> do, rather than being forced to make an assumption one way or another.
>> 
>> In practice, there seem to be two typical scenarios when shutting things 
>> down using methods that block and throw `InterruptedException` (e.g., 
>> `ExecutorService.html.awaitTermination()`, `Process.waitFor()`, etc.):
>> 
>> Scenario 1: You want to ensure everything is properly and completely 
>> shutdown.
>> 
>> In this scenario you ignore `InterruptedException`s until each shutdown step 
>> fully completes: if any step throws an `InterruptedException`, you make a 
>> note of it, loop back around and restart that step. You don't return until 
>> all steps are complete. Just before returning, if you were interrupted at 
>> any point, you re-interrupt the current thread so the interrupt is not lost. 
>> You are optimizing for completeness.
>> 
>> Scenario 2: You want to start shutting things down, but if you are 
>> interrupted, you want to immediately bail out.
>> 
>> As soon as an interrupt occurs, stop trying to shut things down and return. 
>> You are optimizing for speed.
>> 
>> The problem is that if `Process.close()` isn't declared to throw 
>> `InterruptedException`, then that makes it impossible to implement scenario 
>> 1 (regardless of whether you re-interrupt the thread) because the caller has 
>> no way of knowing whether the process actually did terminate. And if you 
>> don't re-interrupt the thread, you also make it impossible to implement 
>> scenario 2.
>> 
>> So in my estimation re-interrupting the thread is better than not 
>> re-interrupting the thread, but regardless of that, there is still a problem 
>> if `Process.close()` isn't declared to throw `InterruptedException`.
>
> Indeed, the benefit of the attempt to be nice and not destroy the process too 
> quickly is almost immediately overcome by the complexity of dealing with the 
> side effects of the waitFor and the necessity to deal with interrupts both in 
> the implementation and in the caller. Especially in an attempt to do 
> something that the caller can do for themselves (calling waitFor).

The faulty implementation using waitFor is removed.

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

PR Review Comment: https://git.openjdk.org/jdk/pull/26649#discussion_r2261555962

Reply via email to