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)


Reply via email to