On Tue, 5 Aug 2025 21:06:32 GMT, Roger Riggs <rri...@openjdk.org> wrote:

>>> Regardless of an interrupt, the process is destroyed, so there is no use to 
>>> propagate the interrupt.
>> 
>> While it's true that it doesn't matter if the purpose of the interruption 
>> was only to interrupt the `close()` invocation, couldn't this `close()` 
>> operation be one of several different "shutdown" actions the thread is 
>> taking, some of which do throw `InterruptedException`, in which the purpose 
>> of the interruption is to interrupt any or all of them? In that case, you'd 
>> want the interrupt to "hang around" so it can happen if/when the next 
>> interruptible operation occurs.
>> 
>> In the example below, if the interruption just happens to occur during 
>> `Process.close()`, you want an `InterruptedException` to be thrown by 
>> `thing3.shutdown()` immediately (or as soon as possible):
>> 
>> try {
>>     thing1.shutdown();    // throws InterruptedException
>>     process2.close();     // does not throw InterruptedException
>>     thing3.shutdown();    // throws InterruptedException
>> } catch (InterruptedException e) {
>>    // bail out now
>> }
>
> I'm a bit dubious about the code above because it does not appear to fully 
> handle the InterruptedException.
> If it is really shutting down then its just complicit in leaving the 
> application is an unpredictable and probably unrecoverable state.
> 
> Propagating the checked exception reduces the usability of close() to the 
> point that I would remove the waitFor.
> It annoying enough already that `waitFor` throws InterruptedException and you 
> have to write more code and maybe a loop to handle that interruption and what 
> it means to the caller.
> I would leave up to the caller to handle that case.
> When used with try-with-resources, the exception handling/re-throwing is 
> complicated enough.

You make some good points. Still, I think swallowing `InterruptException`'s in 
library code is generally considered to be wrong. According to _Java 
Concurrency in Practice_  ยง7.1.3:

> If you don't want to or cannot propagate `InterruptedException`... you need 
> to find another way to preserve the interruption request. The standard way to 
> do this is to restore the interrupted status by calling interrupt again. What 
> you should not do is swallow the `InterruptedException` by catching it and 
> doing nothing in the catch block, unless your code is actually implementing 
> the interruption policy for a thread.

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

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

Reply via email to