You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@commons.apache.org by "Guillaume Alvarez (Jira)" <ji...@apache.org> on 2022/09/23 14:21:00 UTC
[jira] [Commented] (EXEC-46) Process.waitFor should clear interrupt status when throwing InterruptedException
[ https://issues.apache.org/jira/browse/EXEC-46?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17608777#comment-17608777 ]
Guillaume Alvarez commented on EXEC-46:
---------------------------------------
The original JVM issue was closed in Java7: https://bugs.java.com/bugdatabase/view_bug.do?bug_id=6420270
> Process.waitFor should clear interrupt status when throwing InterruptedException
> --------------------------------------------------------------------------------
>
> Key: EXEC-46
> URL: https://issues.apache.org/jira/browse/EXEC-46
> Project: Commons Exec
> Issue Type: Improvement
> Environment: any
> Reporter: nir
> Assignee: Siegfried Goeschl
> Priority: Minor
> Fix For: 1.1
>
>
> Taken from - http://kylecartmell.com/?p=9
> By convention, methods that throw InterruptedException reset the thread interrupt flag.
> Unfortunately Process.waitFor didn't get that memo. (See Sun bug 6420270 - http://bugs.sun.com/view_bug.do?bug_id=6420270).
> This is especially entertaining when a thread invokes multiple processes consecutively and calls waitFor for each of them;
> After one call to waitFor is interrupted, future calls to waitFor from the same thread will immediately throw InterruptedException until the interrupt flag is cleared.
> Process.waitFor should always be called from a try block whether InterruptedException is caught or not, with a corresponding finally block that calls Thread.interrupted to clear the interrupt flag.
> So maybe the code in DefaultExecutor.executeInternal() method should change:
> int exitValue = Executor.INVALID_EXITVALUE;
> try {
> exitValue = process.waitFor();
> } catch (InterruptedException e) {
> process.destroy();
> }
> Maybe there is a need to add
> Thread.interrupted()
> to the catch/finally block
--
This message was sent by Atlassian Jira
(v8.20.10#820010)