Merge pull request #22 from amichair/fix-fastbin-activator
ARIES-1835 - Fix fastbin activator
diff --git a/provider/fastbin/src/main/java/org/apache/aries/rsa/provider/fastbin/BaseActivator.java b/provider/fastbin/src/main/java/org/apache/aries/rsa/provider/fastbin/BaseActivator.java
index 98752c9..1c4357d 100644
--- a/provider/fastbin/src/main/java/org/apache/aries/rsa/provider/fastbin/BaseActivator.java
+++ b/provider/fastbin/src/main/java/org/apache/aries/rsa/provider/fastbin/BaseActivator.java
@@ -46,7 +46,6 @@
protected ExecutorService executor = new ThreadPoolExecutor(0, 1, 0L, TimeUnit.MILLISECONDS,
new LinkedBlockingQueue<>());
- private AtomicBoolean scheduled = new AtomicBoolean();
private long schedulerStopTimeout = TimeUnit.MILLISECONDS.convert(30, TimeUnit.SECONDS);
@@ -65,28 +64,26 @@
@Override
public void start(BundleContext context) throws Exception {
bundleContext = context;
- scheduled.set(true);
- doOpen();
- scheduled.set(false);
+ synchronized (this) {
+ doOpen();
+ }
+ // if it's a managed service we'll get a configuration update
+ // that will start it, otherwise we do it here manually
if (managedServiceRegistration == null) {
- try {
- doStart();
- } catch (Exception e) {
- logger.warn("Error starting activator", e);
- doStop();
- }
- } else {
reconfigure();
}
}
@Override
public void stop(BundleContext context) throws Exception {
- scheduled.set(true);
- doClose();
+ synchronized (this) {
+ doClose();
+ }
executor.shutdown();
executor.awaitTermination(schedulerStopTimeout, TimeUnit.MILLISECONDS);
- doStop();
+ synchronized (this) {
+ doStop();
+ }
}
protected void doOpen() throws Exception {
@@ -218,20 +215,19 @@
}
protected void reconfigure() {
- if (scheduled.compareAndSet(false, true)) {
- executor.submit(this);
- }
+ executor.submit(this);
}
@Override
public void run() {
- scheduled.set(false);
- doStop();
- try {
- doStart();
- } catch (Exception e) {
- logger.warn("Error starting activator", e);
+ synchronized (this) {
doStop();
+ try {
+ doStart();
+ } catch (Throwable t) {
+ logger.warn("Error (re)starting activator", t);
+ doStop();
+ }
}
}