[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())
{