commons-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Sebb (Commented) (JIRA)" <>
Subject [jira] [Commented] (EXEC-34) Race condition prevent watchdog working using ExecuteStreamHandler
Date Fri, 25 Nov 2011 17:45:39 GMT


Sebb commented on EXEC-34:

Or just change the patch headers. Instead of

diff --git a/src/main/java/org/apache/commons/exec/ b/src/main/java/org/apache/commons/exec/
index 2182d85..2110e02 100644
--- a/src/main/java/org/apache/commons/exec/
+++ b/src/main/java/org/apache/commons/exec/

change it to be

--- src/main/java/org/apache/commons/exec/
+++ src/main/java/org/apache/commons/exec/

and it should work.

Yes, it's a bit tedious. 
I find I often have to do a similar trick with Eclipse-generated patches which default to
being relative to the workspace. This is not portable, unless both workspaces use exactly
the same project names.
> Race condition prevent watchdog working using ExecuteStreamHandler
> ------------------------------------------------------------------
>                 Key: EXEC-34
>                 URL:
>             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:!default.jspa
For more information on JIRA, see:


View raw message