[
https://issues.apache.org/jira/browse/SLING-10938?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=18062505#comment-18062505
]
Carsten Ziegeler commented on SLING-10938:
------------------------------------------
Concurrency review findings related to shutdown issues:
1. QueueManager.deactivate() iterates this.queues and sets queueServices = null
without holding queuesLock. A queue created concurrently (between iteration and
null assignment) will have null queueServices causing NPE. Fix: set
isActive.set(false) first, then wrap iteration + queueServices=null in
synchronized(queuesLock).
2. TopologyHandler.deactivate() does not join its background thread. The thread
may still be in config.handleTopologyEvent() (a long-running JCR I/O operation)
when deactivate returns, accessing potentially nullified component references.
Fix: store the Thread reference and call thread.join(timeout) in deactivate().
> Exception thrown on Sling Starter shutdown in JobManagerConfiguration
> ---------------------------------------------------------------------
>
> Key: SLING-10938
> URL: https://issues.apache.org/jira/browse/SLING-10938
> Project: Sling
> Issue Type: Task
> Components: Event
> Affects Versions: Event 4.2.24
> Reporter: Michał Goliński
> Priority: Minor
> Attachments: error.log, stacktrace.txt, stdout.txt
>
>
> On stopping the Sling Starter with Ctrl+C we can occasionally see the
> following stacktrace:
> {code:java}
> ERROR : bundle org.apache.sling.event:4.2.20
> (151)[org.apache.sling.event.impl.jobs.config.JobManagerConfiguration(247)] :
> The activate method has thrown an exception
> java.lang.IllegalArgumentException: Can't create child on a synthetic root
> at
> org.apache.sling.resourceresolver.impl.ResourceResolverImpl.create(ResourceResolverImpl.java:1006)
> ...
> at
> org.apache.sling.api.resource.ResourceUtil.getOrCreateResource(ResourceUtil.java:571)
> at
> org.apache.sling.event.impl.support.ResourceHelper.getOrCreateBasePath(ResourceHelper.java:258)
> at
> org.apache.sling.event.impl.jobs.config.JobManagerConfiguration.activate(JobManagerConfiguration.java:225)
> ...
> at
> org.apache.sling.serviceusermapping.impl.ServiceUserMapperImpl.executeServiceRegistrations(ServiceUserMapperImpl.java:439)
> at
> org.apache.sling.serviceusermapping.impl.ServiceUserMapperImpl.lambda$executeServiceRegistrationsAsync$0(ServiceUserMapperImpl.java:406)
> at
> java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539)
> at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
> at
> java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
> at
> java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
> at java.base/java.lang.Thread.run(Thread.java:833)
> {code}
> This happens also with bundle version 4.2.24.
> This doesn't happen every time, but I've seen up to seven of these at a time
> (the number of stacktraces changes), see the attached file. This might be
> similar to SLING-10204 , although in the debugger I can see the
> ServiceUserMapped being mentioned, not ResourceResolverFactory.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)