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

Kristian Rosenvold updated EXEC-34:
-----------------------------------

    Attachment: EXEC34.patch

Atatched is a patch that fixes EXEC-34. The patch enables the failing tests 
that were already in the codebase.

We have just ported the selenium project to commons-exec, and I think all sorts 
of TESTS are the valid use cases for this patch; for instance: A test starts a 
process, and wants to verify that the process is running. That implies calling 
watching.isWatching as one option. We had /lots/ of problems with this race 
condition when porting selenium and we worked around the problem by subclassing 
the watchdog.

I will also be porting apache-maven to use commons-exec sometime soon, and I 
expect to be running into the same problems with tests there.
                
> Race condition prevent watchdog working using ExecuteStreamHandler
> ------------------------------------------------------------------
>
>                 Key: EXEC-34
>                 URL: https://issues.apache.org/jira/browse/EXEC-34
>             Project: Commons Exec
>          Issue Type: Bug
>         Environment: Windows Vista 64bit, dual core CPU
>            Reporter: Marco Ferrante
>            Assignee: Siegfried Goeschl
>            Priority: Minor
>         Attachments: EXEC34.patch
>
>
> Consider this test case (in _DefaultExecutorTest_ class):
> {noformat}
>     /**
>      * Start a async process using a stream handler and terminate it manually
>      * before the watchdog timeout occurs
>      */
>     public void testExecuteAsyncWithStreamHandlerAndUserTermination() throws 
> Exception {
>         CommandLine cl = new CommandLine(foreverTestScript);
>         ExecuteWatchdog watchdog = new ExecuteWatchdog(Integer.MAX_VALUE);
>         PumpStreamHandler streamHanlder = new PumpStreamHandler(System.out, 
> System.err);
>         exec.setStreamHandler(streamHanlder);
>         MockExecuteResultHandler handler = new MockExecuteResultHandler();
>         exec.execute(cl, handler);
>         // DON'T wait for script to run
>         //Thread.sleep(2000);
>         // teminate it
>         watchdog.destroyProcess();
>         assertTrue("Watchdog should have killed the 
> process",watchdog.killedProcess());
>     }
> {noformat}
> It fails (at least in my environment) because when 
> _watchdog.destroyProcess()_ is invoked the external process is not bound to 
> the watchdog yet.
> Although there are possible several workarounds, but all of them seem to me 
> very intrusive in the code. So, I prefer some discussion before preparing and 
> submitting a patch.
> IMHO, the watchdog should handle a reference to the thread running the 
> process, not to the process itself. In this way, interrupting signals can be 
> transport using default _interrupt()_ method of class _Thread_.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to