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(); )