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
Priority: Critical
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.
-
You can reply to this email to add a comment to the issue online.