Author: sgoeschl
Date: Thu Sep  2 20:42:42 2010
New Revision: 992112

URL: http://svn.apache.org/viewvc?rev=992112&view=rev
Log:
[EXEC-41] Reverting patch since it does not fix the problem under Windows

Modified:
    
commons/proper/exec/trunk/src/main/java/org/apache/commons/exec/ExecuteStreamHandler.java
    
commons/proper/exec/trunk/src/main/java/org/apache/commons/exec/PumpStreamHandler.java
    
commons/proper/exec/trunk/src/test/java/org/apache/commons/exec/DefaultExecutorTest.java

Modified: 
commons/proper/exec/trunk/src/main/java/org/apache/commons/exec/ExecuteStreamHandler.java
URL: 
http://svn.apache.org/viewvc/commons/proper/exec/trunk/src/main/java/org/apache/commons/exec/ExecuteStreamHandler.java?rev=992112&r1=992111&r2=992112&view=diff
==============================================================================
--- 
commons/proper/exec/trunk/src/main/java/org/apache/commons/exec/ExecuteStreamHandler.java
 (original)
+++ 
commons/proper/exec/trunk/src/main/java/org/apache/commons/exec/ExecuteStreamHandler.java
 Thu Sep  2 20:42:42 2010
@@ -63,10 +63,4 @@ public interface ExecuteStreamHandler {
      * Will wait for pump threads to complete.
      */
     void stop();
-
-    /**
-     * Stop handling of the streams - will not be restarted.
-     * @param join if true, wait for the pump threads to complete
-     */
-    void stop(boolean join);
 }

Modified: 
commons/proper/exec/trunk/src/main/java/org/apache/commons/exec/PumpStreamHandler.java
URL: 
http://svn.apache.org/viewvc/commons/proper/exec/trunk/src/main/java/org/apache/commons/exec/PumpStreamHandler.java?rev=992112&r1=992111&r2=992112&view=diff
==============================================================================
--- 
commons/proper/exec/trunk/src/main/java/org/apache/commons/exec/PumpStreamHandler.java
 (original)
+++ 
commons/proper/exec/trunk/src/main/java/org/apache/commons/exec/PumpStreamHandler.java
 Thu Sep  2 20:42:42 2010
@@ -45,8 +45,6 @@ public class PumpStreamHandler implement
 
     private InputStreamPumper inputStreamPumper;
     
-    private boolean alwaysWaitForStreamThreads = true;
-
     /**
      * Construct a new <CODE>PumpStreamHandler</CODE>.
      */
@@ -143,30 +141,7 @@ public class PumpStreamHandler implement
             }
         }
     }
-    
-    
-    /**
-     * Whether to always wait for (join) stream threads, even if the process
-     * is was "killed" by a Watchdog.
-     * @return true, to wait always (original behavior); false, to NOT wait if 
killed 
-     */
-    public boolean isAlwaysWaitForStreamThreads() {
-        return alwaysWaitForStreamThreads;
-    }
-
-    /**
-     * Whether to always wait for (join) stream threads, even if the process
-     * is was "killed" by a Watchdog. Please note that skipping the wait might
-     * leave up to three threads behind so and cause severe problems in a
-     * production environment.
-     * 
-     * @param alwaysWaitForStreamThreads if true, wait always (original 
behavior); if false, do NOT wait when killed 
-     */
-    public void setAlwaysWaitForStreamThreads(boolean 
alwaysWaitForStreamThreads) {
-        this.alwaysWaitForStreamThreads = alwaysWaitForStreamThreads;
-    }
-
-    
+        
     /**
      * Start the <CODE>Thread</CODE>s.
      */
@@ -186,60 +161,35 @@ public class PumpStreamHandler implement
      * Stop pumping the streams.
      */
     public void stop() {
-      stop(this.alwaysWaitForStreamThreads);
-    }
-
-    /**
-     * Stop pumping the streams.
-     * @param join if true, wait for the pump threads to complete, if false 
don't wait
-     */
-    public void stop(boolean join) {
 
         if (inputStreamPumper != null) {
             inputStreamPumper.stopProcessing();
         }
 
-        if (join) {
-            if (outputThread != null) {
-                try {
-                    outputThread.join();
-                    outputThread = null;
-                } catch (InterruptedException e) {
-                    // ignore
-                }
-            }
-
-            if (errorThread != null) {
-                try {
-                    errorThread.join();
-                    errorThread = null;
-                } catch (InterruptedException e) {
-                    // ignore
-                }
-            }
-
-            if (inputThread != null) {
-                try {
-                    inputThread.join();
-                    inputThread = null;
-                } catch (InterruptedException e) {
-                    // ignore
-                }
+        if (outputThread != null) {
+            try {
+                outputThread.join();
+                outputThread = null;
+            } catch (InterruptedException e) {
+                // ignore
             }
         }
-        else {
-            // well, give each thread a chance to terminate itself before
-            // we leave them alone
-            if (outputThread != null) {
-                outputThread.interrupt();
-            }
 
-            if (errorThread != null) {
-                errorThread.interrupt();
+        if (errorThread != null) {
+            try {
+                errorThread.join();
+                errorThread = null;
+            } catch (InterruptedException e) {
+                // ignore
             }
+        }
 
-            if (inputThread != null) {
-                inputThread.interrupt();
+        if (inputThread != null) {
+            try {
+                inputThread.join();
+                inputThread = null;
+            } catch (InterruptedException e) {
+                // ignore
             }
         }
 

Modified: 
commons/proper/exec/trunk/src/test/java/org/apache/commons/exec/DefaultExecutorTest.java
URL: 
http://svn.apache.org/viewvc/commons/proper/exec/trunk/src/test/java/org/apache/commons/exec/DefaultExecutorTest.java?rev=992112&r1=992111&r2=992112&view=diff
==============================================================================
--- 
commons/proper/exec/trunk/src/test/java/org/apache/commons/exec/DefaultExecutorTest.java
 (original)
+++ 
commons/proper/exec/trunk/src/test/java/org/apache/commons/exec/DefaultExecutorTest.java
 Thu Sep  2 20:42:42 2010
@@ -426,7 +426,7 @@ public class DefaultExecutorTest extends
             fis.close();
             String result = baos.toString().trim();
             System.out.println(result);
-            assertTrue(result.endsWith("Finished reading from stdin"));
+            assertTrue(result.indexOf("Finished reading from stdin") > 0);
             assertFalse(exec.isFailure(exitValue));
         }
         else if(OS.isFamilyWindows()) {
@@ -701,14 +701,6 @@ public class DefaultExecutorTest extends
      * Problem is, that sometimes the native process doesn't die and thus
      * streams aren't closed and the stream threads do not complete.
      *
-     * The patch provides setAlwaysWaitForStreamThreads(boolean) method
-     * in PumpStreamHandler. By default, alwaysWaitForStreamThreads is set
-     * to true to preserve the current behavior. If set to false, and
-     * process is killed by watchdog, DefaultExecutor's call into
-     * ErrorStreamHandler.stop will NOT join the stream threads and
-     * DefaultExecutor will NOT attempt to close the streams, so the
-     * executor's thread won't get stuck.
-     *
      * @throws Exception the test failed
      */
     public void testExec41WithStreams() throws Exception {
@@ -729,7 +721,8 @@ public class DefaultExecutorTest extends
                DefaultExecutor executor = new DefaultExecutor();
                ExecuteWatchdog watchdog = new ExecuteWatchdog(2*1000); // 
allow process no more than 2 secs
         PumpStreamHandler pumpStreamHandler = new PumpStreamHandler( 
System.out, System.err);
-        pumpStreamHandler.setAlwaysWaitForStreamThreads(false);
+        // this method was part of the patch I reverted
+        // pumpStreamHandler.setAlwaysWaitForStreamThreads(false);
 
                executor.setWatchdog(watchdog);
         executor.setStreamHandler(pumpStreamHandler);
@@ -842,7 +835,7 @@ public class DefaultExecutorTest extends
     public void testExecuteStability() throws Exception {
 
         // make a plain-vanilla test
-        for(int i=0; i<1000; i++) {
+        for(int i=0; i<100; i++) {
             Map env = new HashMap();
             env.put("TEST_ENV_VAR", new Integer(i));
             CommandLine cl = new CommandLine(testScript);


Reply via email to