Matt Pavlovich created AMQ-9376:
-----------------------------------

             Summary: Fix thread safety issue in 
                 Key: AMQ-9376
                 URL: https://issues.apache.org/jira/browse/AMQ-9376
             Project: ActiveMQ
          Issue Type: Bug
            Reporter: Matt Pavlovich


Need a class instance level lock around the broker map

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 
remove via .cfg delete).

#1. OSGi calls.. 
{noformat}
    synchronized public void destroy() {
        for (String broker : brokers.keySet()) {
            deleted(broker);
        }
    }
{noformat}

#2. Which blows up here..
{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)

Reply via email to