Title: RE: [PATCH] ExecuteWatchdog

> -----Original Message-----
> From: Stefan Bodewig [mailto:[EMAIL PROTECTED]]
:
>
> (1) please try to keep indentation and whitespace as is, I've had a
> hard time to figure out what had actually changed in some of your
> patches (not necessarily this one).

Sorry, my editor was set to replace space as tab, we had problems recently due to source code that had different indent type  as spaces.

> (2) I've commented out the assertion for retCode != 0 in
> ExecuteWatchdogTest.test.testTimeout. In my environment IBM JDK
> 1.3/Linux this fails - will investigate it further.

interesting... on Win NT 4.0 I tried on both Sun JDK1.2.2 and JDK1.3 it runs fine.
I downloaded the pre release IBM JDK 1.3 and it does not even have the same behavior you describe.
Here it fails on testFailed on the killedProcess assertion. (??)

Considering what you said I believe this a return code problem between Linux and Windows...but obviously here it should not be 0, right ?

Will investigate this another problem too asap. Even though at first sight it looks like waitFor does not behave the same way when i'm throwing an exception right away from the process. It takes over 2 secs to execute (which is over the timeout and thus would explain the killedProcess flag) while it takes 150/250ms using Sun JVMs.

This indicates a bug in my code anyway. I didn't check first if the process is terminated before actually killing it. So if the process terminates before the timeout and that you ask the watchdog after the timeout, it will report that it killed it.

Should be something like:

            // if we are here, either someone stopped the watchdog,
            // we are on timeout and the process must be killed, or
                // we are on timeout and the process has already stopped.
            try {
                // We must check if the process was not stopped
                // before being here
                process.exitValue();
            } catch (IllegalThreadStateException e){
                        // the process is not terminated, if this is really
                        // a timeout and not a manual stop then kill it.
                        if (watch){
                                killedProcess = true;
                                process.destroy();
                        }
            }

Another interesting thing is that reflection seems to return methods in the opposite order of the JVMs from Sun. (has nothing to do but interesting fact :)

--
 St�phane Bailliez
 Software Engineer, Paris - France
 iMediation - http://www.imediation.com
 Disclaimer: All the opinions expressed above are mine and not those from my company.


Reply via email to