You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by cz...@apache.org on 2022/02/13 11:12:23 UTC

[felix-dev] 11/13: Fix unregistering servlets

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

cziegeler pushed a commit to branch http/jakarta
in repository https://gitbox.apache.org/repos/asf/felix-dev.git

commit 9b7c1aeae438223aec7197b4569af55b91b07710
Author: Carsten Ziegeler <cz...@adobe.com>
AuthorDate: Tue Jan 4 15:24:31 2022 +0100

    Fix unregistering servlets
---
 .../base/internal/service/SharedHttpServiceImpl.java | 20 +++++++++++++++-----
 1 file changed, 15 insertions(+), 5 deletions(-)

diff --git a/http/base/src/main/java/org/apache/felix/http/base/internal/service/SharedHttpServiceImpl.java b/http/base/src/main/java/org/apache/felix/http/base/internal/service/SharedHttpServiceImpl.java
index 6dccef0..a63d404 100644
--- a/http/base/src/main/java/org/apache/felix/http/base/internal/service/SharedHttpServiceImpl.java
+++ b/http/base/src/main/java/org/apache/felix/http/base/internal/service/SharedHttpServiceImpl.java
@@ -97,19 +97,28 @@ public final class SharedHttpServiceImpl
                 throw new IllegalArgumentException("Nothing registered at " + alias);
             }
 
-            final javax.servlet.Servlet s;
+            final javax.servlet.Servlet s = getServlet(handler);
             if ( handler.getServlet() instanceof HttpResourceServlet ) {
                 final HttpResourceServlet resource = (HttpResourceServlet)handler.getServlet();
-                s = resource.getWrapper();
                 resource.setWrapper(null);
-            } else {
-                s = ((ServletWrapper)handler.getServlet()).getServlet();
             }
             this.handlerRegistry.getRegistry(handler.getContextServiceId()).unregisterServlet(handler.getServletInfo(), true);
             return s;
         }
     }
 
+    private javax.servlet.Servlet getServlet(final ServletHandler handler) {
+        final javax.servlet.Servlet s;
+        if ( handler.getServlet() instanceof HttpResourceServlet ) {
+            final HttpResourceServlet resource = (HttpResourceServlet)handler.getServlet();
+            s = resource.getWrapper();
+            resource.setWrapper(null);
+        } else {
+            s = ((ServletWrapper)handler.getServlet()).getServlet();
+        }
+        return s;
+    }
+
     /**
      * Unregister a servlet
      * @param servlet The servlet
@@ -124,7 +133,8 @@ public final class SharedHttpServiceImpl
                 while (i.hasNext())
                 {
                     final Map.Entry<String, ServletHandler> entry = i.next();
-                    if (entry.getValue().getServlet() == servlet)
+                    final javax.servlet.Servlet s = getServlet(entry.getValue());
+                    if (s == servlet)
                     {
                         this.handlerRegistry.getRegistry(entry.getValue().getContextServiceId()).unregisterServlet(entry.getValue().getServletInfo(), false);