Bug 62123 - concurrentmodification exception on cleanup of RMI objects when stopping webapp
Summary: concurrentmodification exception on cleanup of RMI objects when stopping webapp
Status: RESOLVED FIXED
Alias: None
Product: Tomcat 9
Classification: Unclassified
Component: Catalina (show other bugs)
Version: 9.0.4
Hardware: PC All
: P2 normal (vote)
Target Milestone: -----
Assignee: Tomcat Developers Mailing List
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2018-02-21 18:03 UTC by zerovian
Modified: 2018-02-22 13:22 UTC (History)
0 users



Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description zerovian 2018-02-21 18:03:22 UTC
Receive this exception occasionally when shutting down tomcat when webapp has left RMI objects in memory.  Does not always happen.

Similar to issue 31334, but different stack.

21-Feb-2018 02:05:58.192 SEVERE [Catalina-startStop-2] org.apache.catalina.core.ContainerBase.stopInternal A child container failed during stop
java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to stop component [WebappLoader[StandardEngine[Catalina].StandardHost[localhost].StandardContext[]]]
               at java.util.concurrent.FutureTask.report(FutureTask.java:122)
               at java.util.concurrent.FutureTask.get(FutureTask.java:192)
               at org.apache.catalina.core.ContainerBase.stopInternal(ContainerBase.java:1003)
               at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:257)
               at org.apache.catalina.core.ContainerBase$StopChild.call(ContainerBase.java:1441)
               at org.apache.catalina.core.ContainerBase$StopChild.call(ContainerBase.java:1430)
               at java.util.concurrent.FutureTask.run(FutureTask.java:266)
               at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
               at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
               at java.lang.Thread.run(Thread.java:745)
Caused by: org.apache.catalina.LifecycleException: Failed to stop component [WebappLoader[StandardEngine[Catalina].StandardHost[localhost].StandardContext[]]]
               at org.apache.catalina.util.LifecycleBase.handleSubClassException(LifecycleBase.java:441)
               at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:267)
               at org.apache.catalina.core.StandardContext.stopInternal(StandardContext.java:5363)
               at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:257)
               at org.apache.catalina.core.ContainerBase$StopChild.call(ContainerBase.java:1441)
               at org.apache.catalina.core.ContainerBase$StopChild.call(ContainerBase.java:1430)
               at java.util.concurrent.FutureTask.run(FutureTask.java:266)
               at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)
               at java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:134)
               at org.apache.catalina.core.ContainerBase.stopInternal(ContainerBase.java:997)
               ... 7 more
Caused by: java.util.ConcurrentModificationException
               at java.util.HashMap$HashIterator.nextNode(HashMap.java:1437)
               at java.util.HashMap$ValueIterator.next(HashMap.java:1466)
               at org.apache.catalina.loader.WebappClassLoaderBase.clearReferencesRmiTargets(WebappClassLoaderBase.java:2081)
               at org.apache.catalina.loader.WebappClassLoaderBase.clearReferences(WebappClassLoaderBase.java:1521)
               at org.apache.catalina.loader.WebappClassLoaderBase.stop(WebappClassLoaderBase.java:1463)
               at org.apache.catalina.loader.WebappLoader.stopInternal(WebappLoader.java:443)
               at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:257)
               ... 15 more
 
21-Feb-2018 02:05:58.193 SEVERE [Thread-115] org.apache.catalina.core.ContainerBase.stopInternal A child container failed during stop
java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: A child container failed during stop
               at java.util.concurrent.FutureTask.report(FutureTask.java:122)
               at java.util.concurrent.FutureTask.get(FutureTask.java:192)
               at org.apache.catalina.core.ContainerBase.stopInternal(ContainerBase.java:1003)
               at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:257)
               at org.apache.catalina.core.StandardService.stopInternal(StandardService.java:471)
               at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:257)
               at org.apache.catalina.core.StandardServer.stopInternal(StandardServer.java:791)
               at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:257)
               at org.apache.catalina.startup.Catalina.stop(Catalina.java:744)
               at org.apache.catalina.startup.Catalina$CatalinaShutdownHook.run(Catalina.java:845)
Caused by: org.apache.catalina.LifecycleException: A child container failed during stop
               at org.apache.catalina.core.ContainerBase.stopInternal(ContainerBase.java:1011)
               at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:257)
               at org.apache.catalina.core.ContainerBase$StopChild.call(ContainerBase.java:1441)
               at org.apache.catalina.core.ContainerBase$StopChild.call(ContainerBase.java:1430)
               at java.util.concurrent.FutureTask.run(FutureTask.java:266)
               at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
               at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
               at java.lang.Thread.run(Thread.java:745)
 
21-Feb-2018 02:05:58.195 SEVERE [Thread-115] org.apache.catalina.startup.Catalina.stop Catalina.stop
org.apache.catalina.LifecycleException: A child container failed during stop
               at org.apache.catalina.core.ContainerBase.stopInternal(ContainerBase.java:1011)
               at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:257)
               at org.apache.catalina.core.StandardService.stopInternal(StandardService.java:471)
               at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:257)
               at org.apache.catalina.core.StandardServer.stopInternal(StandardServer.java:791)
               at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:257)
               at org.apache.catalina.startup.Catalina.stop(Catalina.java:744)
               at org.apache.catalina.startup.Catalina$CatalinaShutdownHook.run(Catalina.java:845)
Comment 1 Mark Thomas 2018-02-22 13:22:56 UTC
Thanks for the report.

That Map has a dedicated lock object. I've updated the clean-up code to use it.

Fixed in:
- trunk for 9.0.6 onwards
- 8.5.x for 8.5.29 onwards
- 8.0.x for 8.0.51 onwards
- 7.0.x for 7.0.86 onwards