You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by pa...@apache.org on 2020/04/20 22:28:50 UTC

[sling-org-apache-sling-servlets-resolver] branch issues/SLING-9365 updated: Optimize unregister of servlets.

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

pauls pushed a commit to branch issues/SLING-9365
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-servlets-resolver.git


The following commit(s) were added to refs/heads/issues/SLING-9365 by this push:
     new 5b54a8b  Optimize unregister of servlets.
5b54a8b is described below

commit 5b54a8b2fce83c7ad743160256d005bc5e821b95
Author: Karl Pauls <ka...@gmail.com>
AuthorDate: Tue Apr 21 00:28:35 2020 +0200

    Optimize unregister of servlets.
---
 .../internal/resource/MergingServletResourceProvider.java   | 13 ++++++++++---
 .../servlets/resolver/internal/resource/ServletMounter.java |  2 +-
 2 files changed, 11 insertions(+), 4 deletions(-)

diff --git a/src/main/java/org/apache/sling/servlets/resolver/internal/resource/MergingServletResourceProvider.java b/src/main/java/org/apache/sling/servlets/resolver/internal/resource/MergingServletResourceProvider.java
index 50a8c8e..800d372 100644
--- a/src/main/java/org/apache/sling/servlets/resolver/internal/resource/MergingServletResourceProvider.java
+++ b/src/main/java/org/apache/sling/servlets/resolver/internal/resource/MergingServletResourceProvider.java
@@ -36,6 +36,7 @@ import org.apache.sling.api.resource.SyntheticResource;
 import org.apache.sling.spi.resource.provider.ResolveContext;
 import org.apache.sling.spi.resource.provider.ResourceContext;
 import org.apache.sling.spi.resource.provider.ResourceProvider;
+import org.osgi.framework.Bundle;
 import org.osgi.framework.ServiceReference;
 
 public class MergingServletResourceProvider extends ResourceProvider<Void> {
@@ -49,11 +50,17 @@ public class MergingServletResourceProvider extends ResourceProvider<Void> {
         return index(Arrays.asList(m_registrations.get(m_registrations.size() - 1)));
     }
 
-    synchronized Set<String> remove(ServletResourceProvider provider) {
+    synchronized Set<String> remove(ServletResourceProvider provider, ServiceReference<?> reference) {
         for (Iterator<Pair<ServletResourceProvider, ServiceReference<?>>> regIter = m_registrations.iterator(); regIter.hasNext(); ) {
-            if (regIter.next().getLeft() == provider) {
+            Pair<ServletResourceProvider, ServiceReference<?>> reg = regIter.next();
+            if (reg.getLeft() == provider) {
                 regIter.remove();
-                break;
+            }
+            else {
+                Bundle bundle = reg.getRight().getBundle();
+                if (bundle == null || bundle.getState() == Bundle.STOPPING) {
+                    regIter.remove();
+                }
             }
         }
         m_tree.clear();
diff --git a/src/main/java/org/apache/sling/servlets/resolver/internal/resource/ServletMounter.java b/src/main/java/org/apache/sling/servlets/resolver/internal/resource/ServletMounter.java
index 6696b53..147f33f 100644
--- a/src/main/java/org/apache/sling/servlets/resolver/internal/resource/ServletMounter.java
+++ b/src/main/java/org/apache/sling/servlets/resolver/internal/resource/ServletMounter.java
@@ -312,7 +312,7 @@ public class ServletMounter {
                 }
             }
             if (registration.provider != null && m_provider != null) {
-                Set<String> mounts = m_provider.remove(registration.provider);
+                Set<String> mounts = m_provider.remove(registration.provider, reference);
                 if (m_providerRegs != null)
                 {
                     for (Iterator<ServiceRegistration<ResourceProvider>> registrationIterator = m_providerRegs.iterator(); ((Iterator) registrationIterator).hasNext(); )