[ https://issues.apache.org/jira/browse/AMQ-9376?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Matt Pavlovich reassigned AMQ-9376: ----------------------------------- Assignee: Matt Pavlovich > Fix concurrent modification in ActiveMQServiceFactory > ----------------------------------------------------- > > Key: AMQ-9376 > URL: https://issues.apache.org/jira/browse/AMQ-9376 > Project: ActiveMQ > Issue Type: Bug > Reporter: Matt Pavlovich > Assignee: Matt Pavlovich > Priority: Minor > Fix For: 6.0.0, 5.18.4 > > > Need a class instance level lock or duplicate list around the broker map when > doing a .destroy() caused by bundle refesh > Calling .destroy() loops over a map which calls deleted.. which fails when > there is more than one bundle and the bundle is shutdown first (not a > service(s) removed via .cfg delete or osgi service shutdown lifecycle). > #1. OSGi calls.. > {noformat} > synchronized public void destroy() { > for (String broker : brokers.keySet()) { > deleted(broker); > } > } > {noformat} > #2. Which blows up here.. due to concurrent modification on the _brokers_ > collection > {noformat} > @Override > synchronized public void deleted(String pid) { > ServiceRegistration<BrokerService> reg = brokerRegs.remove(pid); > if (reg != null) { > reg.unregister(); > } > BrokerService broker = brokers.remove(pid); > if (broker != null) { > stop(pid, broker); > } > } > {noformat} -- This message was sent by Atlassian Jira (v8.20.10#820010)