private void processQueue()

in src/main/java/org/apache/sling/auth/core/impl/AuthenticationRequirementsManager.java [256:292]


    private void processQueue() {
        ResourceResolver resolver = null;
        ResourceMapper mapper = null;
        try {
            while ( this.backgroundJobRunning.get() ) {
                Map.Entry<Long, Action> entry = null;
                synchronized ( this.processingQueue ) {
                    final Iterator<Map.Entry<Long, Action> > iter = this.processingQueue.entrySet().iterator();
                    if ( iter.hasNext() ) {
                        entry = iter.next();
                        iter.remove();
                    }
                }
                if ( entry == null ) {
                    synchronized ( this.processingQueue ) {
                        this.backgroundJobRunning.compareAndSet(true, !this.processingQueue.isEmpty());
                    }
                } else {
                    logger.debug("Processing action for service {} : {}", entry.getKey(), entry.getValue());
                    if ( entry.getValue().type != ActionType.REMOVED && mapper == null ) {
                        try {
                            resolver = this.resolverFactory.getServiceResourceResolver(null);
                            mapper = resolver.adaptTo(ResourceMapper.class);
                        } catch ( final org.apache.sling.api.resource.LoginException le) {
                            // ignore
                        }
                    }
                    process(mapper, entry.getKey(), entry.getValue());
                }
            }

        } finally {
            if ( resolver != null ) {
                resolver.close();
            }
        }
    }