You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@uima.apache.org by sc...@apache.org on 2013/11/19 00:12:12 UTC

svn commit: r1543226 - /uima/uima-as/trunk/uimaj-as-core/src/main/java/org/apache/uima/aae/controller/AggregateAnalysisEngineController_impl.java

Author: schor
Date: Mon Nov 18 23:12:12 2013
New Revision: 1543226

URL: http://svn.apache.org/r1543226
Log:
[UIMA-3433] fix semaphore cleanup

Modified:
    uima/uima-as/trunk/uimaj-as-core/src/main/java/org/apache/uima/aae/controller/AggregateAnalysisEngineController_impl.java

Modified: uima/uima-as/trunk/uimaj-as-core/src/main/java/org/apache/uima/aae/controller/AggregateAnalysisEngineController_impl.java
URL: http://svn.apache.org/viewvc/uima/uima-as/trunk/uimaj-as-core/src/main/java/org/apache/uima/aae/controller/AggregateAnalysisEngineController_impl.java?rev=1543226&r1=1543225&r2=1543226&view=diff
==============================================================================
--- uima/uima-as/trunk/uimaj-as-core/src/main/java/org/apache/uima/aae/controller/AggregateAnalysisEngineController_impl.java (original)
+++ uima/uima-as/trunk/uimaj-as-core/src/main/java/org/apache/uima/aae/controller/AggregateAnalysisEngineController_impl.java Mon Nov 18 23:12:12 2013
@@ -3151,13 +3151,20 @@ public class AggregateAnalysisEngineCont
   public void stop() {
 	  super.stop(true);  // shutdown now
 	  
-	// release all permits
-	  if ( semaphore != null ) {
-		  while ( semaphore.availablePermits() > 0) {
-		  		semaphore.release();
-	  	  }
-	  }
-
+	  // enable blocked threads to finish // https://issues.apache.org/jira/browse/UIMA-3433
+    if ( semaphore != null ) {
+      while ( semaphore.hasQueuedThreads()) {
+        semaphore.release(); // permit any blocked threads to clean up
+        try {
+          Thread.sleep(1); // allow other thread to become unqueued
+        } catch (InterruptedException e) {
+        }  
+      }
+//      semaphore.drainPermits();  
+//      while ( semaphore.availablePermits() > 0) {
+//          semaphore.release();
+//        }
+    }
    
     
     this.cleanUp();