[ 
https://issues.apache.org/jira/browse/EXEC-71?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Dominik Stadler updated EXEC-71:
--------------------------------

    Description: 
The following test hangs endlessly for me because the ExecuteWatchdog will 
never get "processStarted = true" because starting an non-existing process will 
never lead to the started flag.

{code}
@Test
        public void testCommonsExecHang() throws Exception {
        CommandLine command = new CommandLine("someunexistingcommand");
        DefaultExecutor executor = new DefaultExecutor();

        ExecuteWatchdog watchdog = new 
ExecuteWatchdog(ExecuteWatchdog.INFINITE_TIMEOUT);
        executor.setWatchdog(watchdog);

        DefaultExecuteResultHandler resultHandler = new 
DefaultExecuteResultHandler() {
                        @Override
                        public void onProcessFailed(ExecuteException e) {
                        System.out.println("Process did not stop gracefully, 
had exception '" + e.getMessage() + "' while executing process");
                                super.onProcessFailed(e);
                        }
        };

        executor.execute(command, null, resultHandler);

        // this hangs!!
        watchdog.isWatching();

        watchdog.destroyProcess();
        }
{code}

not calling isWatching(), but only destroyProcess() hangs as well!

Options that I see: timeout the loop or handle the case of failure to start the 
Watchdog in DefaultExecutor.executeInternal() so that the Watchdog does not 
hang in this case

  was:
The following test hangs endlessly for me because the ExecuteWatchdog will 
never get "processStarted = true" because starting an non-existing process will 
never lead to the started flag.

{code}
@Test
        public void testCommonsExecHang() throws Exception {
        CommandLine command = new CommandLine("someunexistingcommand");
        DefaultExecutor executor = new DefaultExecutor();

        ExecuteWatchdog watchdog = new 
ExecuteWatchdog(ExecuteWatchdog.INFINITE_TIMEOUT);
        executor.setWatchdog(watchdog);

        DefaultExecuteResultHandler resultHandler = new 
DefaultExecuteResultHandler() {
                        @Override
                        public void onProcessFailed(ExecuteException e) {
                        System.out.println("Process did not stop gracefully, 
had exception '" + e.getMessage() + "' while executing process");
                                super.onProcessFailed(e);
                        }
        };

        executor.execute(command, null, resultHandler);

        // this hangs!!
        watchdog.isWatching();

        watchdog.destroyProcess();
        }
{code}

    
> Changes for EXEC-34 (Race condition prevent watchdog working using 
> ExecuteStreamHandler) hang endlessly if the command cannot be found
> --------------------------------------------------------------------------------------------------------------------------------------
>
>                 Key: EXEC-71
>                 URL: https://issues.apache.org/jira/browse/EXEC-71
>             Project: Commons Exec
>          Issue Type: Bug
>    Affects Versions: 1.1.1
>            Reporter: Dominik Stadler
>
> The following test hangs endlessly for me because the ExecuteWatchdog will 
> never get "processStarted = true" because starting an non-existing process 
> will never lead to the started flag.
> {code}
> @Test
>       public void testCommonsExecHang() throws Exception {
>         CommandLine command = new CommandLine("someunexistingcommand");
>         DefaultExecutor executor = new DefaultExecutor();
>         ExecuteWatchdog watchdog = new 
> ExecuteWatchdog(ExecuteWatchdog.INFINITE_TIMEOUT);
>         executor.setWatchdog(watchdog);
>         DefaultExecuteResultHandler resultHandler = new 
> DefaultExecuteResultHandler() {
>                       @Override
>                       public void onProcessFailed(ExecuteException e) {
>                       System.out.println("Process did not stop gracefully, 
> had exception '" + e.getMessage() + "' while executing process");
>                               super.onProcessFailed(e);
>                       }
>         };
>         executor.execute(command, null, resultHandler);
>         // this hangs!!
>         watchdog.isWatching();
>         watchdog.destroyProcess();
>       }
> {code}
> not calling isWatching(), but only destroyProcess() hangs as well!
> Options that I see: timeout the loop or handle the case of failure to start 
> the Watchdog in DefaultExecutor.executeInternal() so that the Watchdog does 
> not hang in this case

--
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

Reply via email to