You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@karaf.apache.org by an...@apache.org on 2011/01/05 22:43:57 UTC

svn commit: r1055653 - /karaf/trunk/main/src/main/java/org/apache/karaf/main/Main.java

Author: anierbeck
Date: Wed Jan  5 21:43:57 2011
New Revision: 1055653

URL: http://svn.apache.org/viewvc?rev=1055653&view=rev
Log:
[KARAF-327] - This should handle the stopping through the wrapper better. 

Modified:
    karaf/trunk/main/src/main/java/org/apache/karaf/main/Main.java

Modified: karaf/trunk/main/src/main/java/org/apache/karaf/main/Main.java
URL: http://svn.apache.org/viewvc/karaf/trunk/main/src/main/java/org/apache/karaf/main/Main.java?rev=1055653&r1=1055652&r2=1055653&view=diff
==============================================================================
--- karaf/trunk/main/src/main/java/org/apache/karaf/main/Main.java (original)
+++ karaf/trunk/main/src/main/java/org/apache/karaf/main/Main.java Wed Jan  5 21:43:57 2011
@@ -38,6 +38,7 @@ import java.util.regex.Pattern;
 
 import org.osgi.framework.Bundle;
 import org.osgi.framework.BundleContext;
+import org.osgi.framework.BundleException;
 import org.osgi.framework.Constants;
 import org.osgi.framework.FrameworkEvent;
 import org.osgi.framework.ServiceReference;
@@ -260,11 +261,25 @@ public class Main {
                 	FrameworkEvent event;
 	                if (callback != null) {
 	                	callback.waitingForShutdown();
-	                	framework.stop();
-	                	do {
+	                	event = framework.waitForStop(timeout);
+	                	//do the stoping in an extra thread
+	                	Runnable stopper = new Runnable() {
+							
+							public void run() {
+								try {
+									
+									framework.stop();
+								} catch (BundleException e) {
+									System.err.println("Exception while stoping framework: " + e);
+								}
+							}
+						};
+	                	Thread t = new Thread(stopper);
+	                	t.start();
+	                	while (t.getState() != Thread.State.TERMINATED && event.getType() == FrameworkEvent.WAIT_TIMEDOUT) {
 	                		callback.waitingForShutdown();
 	                		event = framework.waitForStop(timeout);
-	                	} while(event.getType() == FrameworkEvent.WAIT_TIMEDOUT);
+	                	} 
 	                	break;
                 	} else {
                 		event = framework.waitForStop(0);