Details
-
Bug
-
Status: Resolved
-
Minor
-
Resolution: Fixed
-
None
-
None
Description
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..
synchronized public void destroy() { for (String broker : brokers.keySet()) { deleted(broker); } }
#2. Which blows up here.. due to concurrent modification on the brokers collection
@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); } }