You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@commons.apache.org by "Joel McCance (JIRA)" <ji...@apache.org> on 2012/10/22 19:18:12 UTC

[jira] [Comment Edited] (EXEC-68) Watchdog kills process immediately if timeout is too large

    [ https://issues.apache.org/jira/browse/EXEC-68?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13481509#comment-13481509 ] 

Joel McCance edited comment on EXEC-68 at 10/22/12 5:17 PM:
------------------------------------------------------------

Bug is a result of the current timeout polling loop relying on being able to add the current system time to the timeout without it overflowing. With very large timeout values, the sum of these two items overflows, so the polling loop exits immediately.

Attached patch changes behavior of Watchdog#run() so that it does not have to add the current millis time to the timeout, as well as a regression test for DefaultExecutorTest to reproduce the bug should it recur.
                
      was (Author: jmccance):
    Bug is a result of the current timeout polling loop relying on being able to add the current system time to the timeout without it overflowing. With very large timeout values, the sum of these two items overflows, so the polling loop exits immediately.

Attached patch changes behavior of Watchdog#run() so that it does not have to add the current millis time to the timeout.
                  
> Watchdog kills process immediately if timeout is too large
> ----------------------------------------------------------
>
>                 Key: EXEC-68
>                 URL: https://issues.apache.org/jira/browse/EXEC-68
>             Project: Commons Exec
>          Issue Type: Bug
>    Affects Versions: 1.1, 1.1.1
>         Environment: Should exist for all platforms, but specifically identified on Windows 7.
>            Reporter: Joel McCance
>            Priority: Minor
>         Attachments: EXEC-68.patch
>
>
> When using the ExecuteWatchdog with a very large timeout (e.g., Long.MAX_VALUE), the Watchdog immediately destroys the process instead of waiting for the duration of the timeout. For example, the following code snippet would continue immediately:
> {code}
> DefaultExecutor executor = new DefaultExecutor();
> ExecuteWatchdog watchdog = new ExecuteWatchdog(Long.MAX_VALUE);
> executor.setWatchdog(watchdog);
> executor.execute(cmd); // Where `cmd` could be any valid command.
> {code}

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira