You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by ma...@apache.org on 2011/03/17 00:20:51 UTC

svn commit: r1082343 - /felix/trunk/http/whiteboard/src/main/java/org/apache/felix/http/whiteboard/internal/manager/ExtenderManagerImpl.java

Author: marrs
Date: Wed Mar 16 23:20:51 2011
New Revision: 1082343

URL: http://svn.apache.org/viewvc?rev=1082343&view=rev
Log:
FELIX-2881 Fixed the problem.

Modified:
    felix/trunk/http/whiteboard/src/main/java/org/apache/felix/http/whiteboard/internal/manager/ExtenderManagerImpl.java

Modified: felix/trunk/http/whiteboard/src/main/java/org/apache/felix/http/whiteboard/internal/manager/ExtenderManagerImpl.java
URL: http://svn.apache.org/viewvc/felix/trunk/http/whiteboard/src/main/java/org/apache/felix/http/whiteboard/internal/manager/ExtenderManagerImpl.java?rev=1082343&r1=1082342&r2=1082343&view=diff
==============================================================================
--- felix/trunk/http/whiteboard/src/main/java/org/apache/felix/http/whiteboard/internal/manager/ExtenderManagerImpl.java (original)
+++ felix/trunk/http/whiteboard/src/main/java/org/apache/felix/http/whiteboard/internal/manager/ExtenderManagerImpl.java Wed Mar 16 23:20:51 2011
@@ -16,17 +16,19 @@
  */
 package org.apache.felix.http.whiteboard.internal.manager;
 
-import org.osgi.service.http.HttpContext;
-import org.osgi.service.http.HttpService;
-import org.osgi.framework.ServiceReference;
-import org.osgi.framework.Bundle;
-import org.osgi.framework.Constants;
-import org.apache.felix.http.api.ExtHttpService;
-import org.apache.felix.http.base.internal.logger.SystemLogger;
+import java.util.Collection;
+import java.util.HashMap;
 
-import javax.servlet.Servlet;
 import javax.servlet.Filter;
-import java.util.HashMap;
+import javax.servlet.Servlet;
+
+import org.apache.felix.http.api.ExtHttpService;
+import org.apache.felix.http.base.internal.logger.SystemLogger;
+import org.osgi.framework.Bundle;
+import org.osgi.framework.Constants;
+import org.osgi.framework.ServiceReference;
+import org.osgi.service.http.HttpContext;
+import org.osgi.service.http.HttpService;
 
 public final class ExtenderManagerImpl
     implements ExtenderManager
@@ -162,20 +164,38 @@ public final class ExtenderManagerImpl
 
     public synchronized void unregisterAll()
     {
-        if (this.httpService != null) {
-            for (AbstractMapping mapping : this.mapping.values()) {
-                mapping.unregister(this.httpService);
-            }
-        }
+    	AbstractMapping[] mappings = null;
+    	HttpService service;
+    	synchronized (this) {
+			service = this.httpService;
+			if (service != null) {
+    			Collection<AbstractMapping> values = this.mapping.values();
+    			mappings = values.toArray(new AbstractMapping[values.size()]);
+    		}
+    	}
+    	if (mappings != null) {
+    		for (AbstractMapping mapping : mappings) {
+    			mapping.unregister(service);
+    		}
+    	}
     }
 
     private synchronized void registerAll()
     {
-        if (this.httpService != null) {
-            for (AbstractMapping mapping : this.mapping.values()) {
-                mapping.register(this.httpService);
-            }
-        }
+    	AbstractMapping[] mappings = null;
+    	HttpService service;
+    	synchronized (this) {
+			service = this.httpService;
+			if (service != null) {
+    			Collection<AbstractMapping> values = this.mapping.values();
+    			mappings = values.toArray(new AbstractMapping[values.size()]);
+    		}
+    	}
+    	if (mappings != null) {
+    		for (AbstractMapping mapping : mappings) {
+    			mapping.register(service);
+    		}
+    	}
     }
 
     private synchronized void addMapping(Object key, AbstractMapping mapping)