Benjamin Marwell created CXF-9245:
-------------------------------------

             Summary: Race Condition in ServerLifeCycleManagerImpl#stopServer()
                 Key: CXF-9245
                 URL: https://issues.apache.org/jira/browse/CXF-9245
             Project: CXF
          Issue Type: Bug
          Components: Core
            Reporter: Benjamin Marwell


Current code:

{code:java}
public class ServerLifeCycleManagerImpl implements ServerLifeCycleManager, 
BusExtension {

    private CopyOnWriteArrayList<ServerLifeCycleListener> listeners =
            new CopyOnWriteArrayList<>();


    public void stopServer(Server server) {
        ListIterator<ServerLifeCycleListener> li = 
listeners.listIterator(listeners.size()); // this is line 66
        while (li.hasPrevious()) {
            li.previous().stopServer(server);
        }
    }
{code}

listeners might get modified on shutdown, which leads to:

{code}
java.lang.IndexOutOfBoundsException: Index: 3, Size: 2
 at 
java.base/java.util.concurrent.CopyOnWriteArrayList.listIterator(CopyOnWriteArrayList.java:1151)
 at 
org.apache.cxf.bus.managers.ServerLifeCycleManagerImpl.stopServer(ServerLifeCycleManagerImpl.java:66)
 at org.apache.cxf.endpoint.ServerImpl.stop(ServerImpl.java:177)
{code}

Also see code snippet by Romain in #CXF on slack



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

Reply via email to