SLING-2552 : Correctly handle register/unregister of OSGi installer
git-svn-id: https://svn.apache.org/repos/asf/sling/trunk@1367962 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/src/main/java/org/apache/sling/launchpad/installer/impl/LaunchpadListener.java b/src/main/java/org/apache/sling/launchpad/installer/impl/LaunchpadListener.java
index 22836a1..62b9780 100644
--- a/src/main/java/org/apache/sling/launchpad/installer/impl/LaunchpadListener.java
+++ b/src/main/java/org/apache/sling/launchpad/installer/impl/LaunchpadListener.java
@@ -35,12 +35,29 @@
*/
public void onEvent(final InstallationEvent event) {
if ( event.getType() == InstallationEvent.TYPE.STARTED ) {
+ this.start();
+ } else if ( event.getType() == InstallationEvent.TYPE.SUSPENDED ) {
+ this.stop();
+ }
+ }
+
+ /**
+ * Suspend the startup handler (if not already done so)
+ */
+ public void start() {
+ if ( !started ) {
this.startupHandler.waitWithStartup(true);
started = true;
- } else if ( event.getType() == InstallationEvent.TYPE.SUSPENDED ) {
- if ( started ) {
- this.startupHandler.waitWithStartup(false);
- }
+ }
+ }
+
+ /**
+ * Make sure the startup handler is not in suspended state
+ */
+ public void stop() {
+ if ( started ) {
+ this.startupHandler.waitWithStartup(false);
+ started = false;
}
}
diff --git a/src/main/java/org/apache/sling/launchpad/installer/impl/ServicesListener.java b/src/main/java/org/apache/sling/launchpad/installer/impl/ServicesListener.java
index 03f7883..732b53c 100644
--- a/src/main/java/org/apache/sling/launchpad/installer/impl/ServicesListener.java
+++ b/src/main/java/org/apache/sling/launchpad/installer/impl/ServicesListener.java
@@ -57,6 +57,8 @@
/** Boolean marker to not reprocess things. */
private volatile boolean installed = false;
+ private LaunchpadListener launchpadListener;
+
/**
* Start listeners
*/
@@ -84,7 +86,7 @@
if ( installer != null && lcp != null && handler != null ) {
if ( !this.installed ) {
this.installed = true;
- final LaunchpadListener launchpadListener = new LaunchpadListener(handler);
+ this.launchpadListener = new LaunchpadListener(handler);
final Dictionary<String, Object> props = new Hashtable<String, Object>();
props.put(Constants.SERVICE_DESCRIPTION, "Apache Sling Launchpad Startup Listener");
props.put(Constants.SERVICE_VENDOR, "The Apache Software Foundation");
@@ -102,9 +104,11 @@
this.providerListener.deactivate();
this.startupListener.deactivate();
if ( this.launchpadListenerReg != null ) {
+ this.launchpadListener.stop();
this.launchpadListenerReg.unregister();
this.launchpadListenerReg = null;
}
+ this.launchpadListener = null;
}
/**