[ https://issues.apache.org/jira/browse/EXEC-34?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13159560#comment-13159560 ]
Olivier Lamy commented on EXEC-34: ---------------------------------- +1: nice patch! > 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