You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@sling.apache.org by "Joerg Hoh (Jira)" <ji...@apache.org> on 2026/07/21 09:20:00 UTC

[jira] [Created] (SLING-13266) BundledScriptTracker can race on shutdown

Joerg Hoh created SLING-13266:
---------------------------------

             Summary: BundledScriptTracker can race on shutdown
                 Key: SLING-13266
                 URL: https://issues.apache.org/jira/browse/SLING-13266
             Project: Sling
          Issue Type: Improvement
          Components: Servlets
    Affects Versions: Servlets Resolver 3.0.6
            Reporter: Joerg Hoh


h3. Summary

{{BundledScriptTracker.deactivate()}} is not synchronized against {{refreshDispatcher()}}, so the two can run concurrently and both write the shared {{dispatchers}} {{AtomicReference}}.

h3. Details

{{refreshDispatcher()}} is {{synchronized}} and reads {{dispatchers}} (with a {{null}} check for the deactivated state), then swaps in a new map at the end. {{deactivate()}} sets {{dispatchers}} to {{null}} but takes no lock. If {{deactivate()}} runs after a concurrent {{refreshDispatcher()}} has passed its null check but before its final swap, the refresh re-publishes a non-{{null}} map after shutdown. The {{DispatcherServlet}} registrations in that map are then leaked (never unregistered), and the refresh may also call {{register()}} with an already-nulled {{BundleContext}}.

Shutdown-only, low severity.

h3. Fix

Make {{deactivate()}} {{synchronized}} so it cannot interleave with {{refreshDispatcher()}}; a refresh then either completes before deactivation or observes {{dispatchers == null}} and returns early.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)