[FELIX-4472] Various concurrency issues in fileinstall

git-svn-id: https://svn.apache.org/repos/asf/felix/trunk@1583668 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/fileinstall/src/main/java/org/apache/felix/fileinstall/internal/ConfigInstaller.java b/fileinstall/src/main/java/org/apache/felix/fileinstall/internal/ConfigInstaller.java
index 02cc7cb..f6684ae 100644
--- a/fileinstall/src/main/java/org/apache/felix/fileinstall/internal/ConfigInstaller.java
+++ b/fileinstall/src/main/java/org/apache/felix/fileinstall/internal/ConfigInstaller.java
@@ -62,11 +62,7 @@
 
     public void destroy()
     {
-        try {
-            registration.unregister();
-        } catch (IllegalStateException e) {
-            // Ignore
-        }
+        registration.unregister();
     }
 
     public boolean canHandle(File artifact)
diff --git a/fileinstall/src/main/java/org/apache/felix/fileinstall/internal/FileInstall.java b/fileinstall/src/main/java/org/apache/felix/fileinstall/internal/FileInstall.java
index b432acc..7d5de85 100644
--- a/fileinstall/src/main/java/org/apache/felix/fileinstall/internal/FileInstall.java
+++ b/fileinstall/src/main/java/org/apache/felix/fileinstall/internal/FileInstall.java
@@ -62,6 +62,7 @@
     ServiceTracker listenersTracker;
     final ReadWriteLock lock = new ReentrantReadWriteLock();
     ServiceRegistration urlHandlerRegistration;
+    volatile boolean stopped;
 
     public void start(BundleContext context) throws Exception
     {
@@ -199,6 +200,7 @@
         }
         finally
         {
+            stopped = true;
             lock.writeLock().unlock();
         }
     }
@@ -376,6 +378,9 @@
                 lock.writeLock().lock();
                 try
                 {
+                    if (stopped) {
+                        return null;
+                    }
                     ConfigurationAdmin cm = super.addingService(serviceReference);
                     long id = (Long) serviceReference.getProperty(Constants.SERVICE_ID);
                     ConfigInstaller configInstaller = new ConfigInstaller(this.context, cm, fileInstall);
@@ -394,6 +399,9 @@
                 lock.writeLock().lock();
                 try
                 {
+                    if (stopped) {
+                        return;
+                    }
                     Iterator iterator = configs.iterator();
                     while (iterator.hasNext())
                     {