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.

Reply via email to