You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ro...@apache.org on 2017/11/07 09:53:22 UTC

[sling-org-apache-sling-launchpad-installer] 05/07: SLING-2552 : Correctly handle register/unregister of OSGi installer

This is an automated email from the ASF dual-hosted git repository.

rombert pushed a commit to annotated tag org.apache.sling.launchpad.installer-1.1.4
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-launchpad-installer.git

commit 7d4c6ca165ca5b3b6e11e2474ffd9d767501195f
Author: Carsten Ziegeler <cz...@apache.org>
AuthorDate: Wed Aug 1 12:39:41 2012 +0000

    SLING-2552 : Correctly handle register/unregister of OSGi installer
    
    git-svn-id: https://svn.apache.org/repos/asf/sling/trunk/launchpad/installer@1367962 13f79535-47bb-0310-9956-ffa450edef68
---
 .../installer/impl/LaunchpadListener.java          | 25 ++++++++++++++++++----
 .../launchpad/installer/impl/ServicesListener.java |  6 +++++-
 2 files changed, 26 insertions(+), 5 deletions(-)

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 class LaunchpadListener implements InstallationListener {
      */
     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 @@ public class ServicesListener {
     /** Boolean marker to not reprocess things. */
     private volatile boolean installed = false;
 
+    private LaunchpadListener launchpadListener;
+
     /**
      * Start listeners
      */
@@ -84,7 +86,7 @@ public class ServicesListener {
         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 @@ public class ServicesListener {
         this.providerListener.deactivate();
         this.startupListener.deactivate();
         if ( this.launchpadListenerReg != null ) {
+            this.launchpadListener.stop();
             this.launchpadListenerReg.unregister();
             this.launchpadListenerReg = null;
         }
+        this.launchpadListener = null;
     }
 
     /**

-- 
To stop receiving notification emails like this one, please contact
"commits@sling.apache.org" <co...@sling.apache.org>.