synchronized boolean remove()

in src/main/java/org/apache/sling/servlets/resolver/internal/resource/MergingServletResourceProvider.java [59:84]


    synchronized boolean remove(ServletResourceProvider provider) {
        boolean found = false;
        for (Iterator<Map.Entry<ServletResourceProvider, ServiceReference<?>>> regIter = registrations.iterator();
                regIter.hasNext(); ) {
            Map.Entry<ServletResourceProvider, ServiceReference<?>> reg = regIter.next();
            if (reg.getKey() == provider) {
                regIter.remove();
                found = true;
            } else {
                Bundle bundle = reg.getValue().getBundle();
                if (bundle == null || bundle.getState() == Bundle.STOPPING) {
                    regIter.remove();
                    found = true;
                }
            }
        }
        if (found) {
            ConcurrentHashMap<String, Set<String>> localTree = new ConcurrentHashMap<>();
            ConcurrentHashMap<String, Map.Entry<ServletResourceProvider, ServiceReference<?>>> localProvs =
                    new ConcurrentHashMap<>();
            index(localTree, localProvs, registrations);
            tree.set(localTree);
            providers.set(localProvs);
        }
        return found;
    }