diff options
author | Anjum Fatima | 2019-08-20 20:54:44 +0000 |
---|---|---|
committer | Anjum Fatima | 2019-08-20 20:54:44 +0000 |
commit | 4969d3557460a6d96ad985de999ee68b7f8700d1 (patch) | |
tree | 45e823981a69da8d198c4c8fb1e30e4937644afd /bundles/org.eclipse.osgi/container/src | |
parent | 212756c289fccaa47aac82ad584bcf7521642f64 (diff) | |
download | rt.equinox.framework-4969d3557460a6d96ad985de999ee68b7f8700d1.tar.gz rt.equinox.framework-4969d3557460a6d96ad985de999ee68b7f8700d1.tar.xz rt.equinox.framework-4969d3557460a6d96ad985de999ee68b7f8700d1.zip |
Bug 549947 - Provide consistent ordering for callingY20190829-0900Y20190826-1000Y20190822-0900S4_13_0_RC1S4_13_0_M3I20190830-0550I20190830-0440I20190828-1800I20190828-0600I20190827-1800I20190827-0600I20190826-1800I20190826-0640I20190826-0415I20190823-0840I20190823-0530I20190821-1800
service/bundle/framework listeners
Change-Id: I8dffb2bf4b8d00d5778b778c6f4f54cbe9ec6667
Signed-off-by: Anjum Fatima <anjum.eclipse@gmail.com>
Diffstat (limited to 'bundles/org.eclipse.osgi/container/src')
2 files changed, 44 insertions, 13 deletions
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/framework/EquinoxEventPublisher.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/framework/EquinoxEventPublisher.java index 064983f21..19daba488 100644 --- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/framework/EquinoxEventPublisher.java +++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/framework/EquinoxEventPublisher.java @@ -18,6 +18,7 @@ import java.security.PrivilegedAction; import java.util.Collection; import java.util.Collections; import java.util.HashMap; +import java.util.LinkedHashMap; import java.util.Map; import java.util.Set; import java.util.concurrent.CountDownLatch; @@ -65,13 +66,13 @@ public class EquinoxEventPublisher { * installed in the Framework. */ // Map of BundleContexts for bundle's BundleListeners. - private final Map<BundleContextImpl, CopyOnWriteIdentityMap<BundleListener, BundleListener>> allBundleListeners = new HashMap<>(); + private final Map<BundleContextImpl, CopyOnWriteIdentityMap<BundleListener, BundleListener>> allBundleListeners = new LinkedHashMap<>(); // Map of BundleContexts for bundle's SynchronousBundleListeners. - private final Map<BundleContextImpl, CopyOnWriteIdentityMap<SynchronousBundleListener, SynchronousBundleListener>> allSyncBundleListeners = new HashMap<>(); + private final Map<BundleContextImpl, CopyOnWriteIdentityMap<SynchronousBundleListener, SynchronousBundleListener>> allSyncBundleListeners = new LinkedHashMap<>(); // Map of BundleContexts for bundle's FrameworkListeners. - private final Map<BundleContextImpl, CopyOnWriteIdentityMap<FrameworkListener, FrameworkListener>> allFrameworkListeners = new HashMap<>(); + private final Map<BundleContextImpl, CopyOnWriteIdentityMap<FrameworkListener, FrameworkListener>> allFrameworkListeners = new LinkedHashMap<>(); public EquinoxEventPublisher(EquinoxContainer container) { this.container = container; @@ -163,7 +164,7 @@ public class EquinoxEventPublisher { BundleContextImpl systemContext = null; Set<Map.Entry<SynchronousBundleListener, SynchronousBundleListener>> systemBundleListenersSync = null; synchronized (allSyncBundleListeners) { - listenersSync = new HashMap<>(allSyncBundleListeners.size()); + listenersSync = new LinkedHashMap<>(allSyncBundleListeners.size()); for (Map.Entry<BundleContextImpl, CopyOnWriteIdentityMap<SynchronousBundleListener, SynchronousBundleListener>> entry : allSyncBundleListeners.entrySet()) { CopyOnWriteIdentityMap<SynchronousBundleListener, SynchronousBundleListener> listeners = entry.getValue(); if (!listeners.isEmpty()) { @@ -183,7 +184,7 @@ public class EquinoxEventPublisher { Set<Map.Entry<BundleListener, BundleListener>> systemBundleListenersAsync = null; if ((event.getType() & (BundleEvent.STARTING | BundleEvent.STOPPING | BundleEvent.LAZY_ACTIVATION)) == 0) { synchronized (allBundleListeners) { - listenersAsync = new HashMap<>(allBundleListeners.size()); + listenersAsync = new LinkedHashMap<>(allBundleListeners.size()); for (Map.Entry<BundleContextImpl, CopyOnWriteIdentityMap<BundleListener, BundleListener>> entry : allBundleListeners.entrySet()) { CopyOnWriteIdentityMap<BundleListener, BundleListener> listeners = entry.getValue(); if (!listeners.isEmpty()) { @@ -318,7 +319,7 @@ public class EquinoxEventPublisher { // Build the listener snapshot Map<BundleContextImpl, Set<Map.Entry<FrameworkListener, FrameworkListener>>> listenerSnapshot; synchronized (allFrameworkListeners) { - listenerSnapshot = new HashMap<>(allFrameworkListeners.size()); + listenerSnapshot = new LinkedHashMap<>(allFrameworkListeners.size()); for (Map.Entry<BundleContextImpl, CopyOnWriteIdentityMap<FrameworkListener, FrameworkListener>> entry : allFrameworkListeners.entrySet()) { CopyOnWriteIdentityMap<FrameworkListener, FrameworkListener> listeners = entry.getValue(); if (!listeners.isEmpty()) { diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/serviceregistry/ServiceRegistry.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/serviceregistry/ServiceRegistry.java index 5d4da714c..d53f3b246 100644 --- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/serviceregistry/ServiceRegistry.java +++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/serviceregistry/ServiceRegistry.java @@ -14,19 +14,49 @@ package org.eclipse.osgi.internal.serviceregistry; -import java.security.*; -import java.util.*; +import java.security.AccessController; +import java.security.PrivilegedAction; +import java.security.ProtectionDomain; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.Dictionary; +import java.util.HashMap; +import java.util.Iterator; +import java.util.LinkedHashMap; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; +import java.util.Set; import org.eclipse.osgi.container.Module; import org.eclipse.osgi.container.ModuleRevision; -import org.eclipse.osgi.framework.eventmgr.*; +import org.eclipse.osgi.framework.eventmgr.CopyOnWriteIdentityMap; +import org.eclipse.osgi.framework.eventmgr.EventDispatcher; +import org.eclipse.osgi.framework.eventmgr.ListenerQueue; import org.eclipse.osgi.internal.debug.Debug; import org.eclipse.osgi.internal.framework.BundleContextImpl; import org.eclipse.osgi.internal.framework.EquinoxContainer; import org.eclipse.osgi.internal.messages.Msg; import org.eclipse.osgi.storage.BundleInfo.Generation; import org.eclipse.osgi.util.NLS; -import org.osgi.framework.*; -import org.osgi.framework.hooks.service.*; +import org.osgi.framework.Bundle; +import org.osgi.framework.BundleContext; +import org.osgi.framework.Constants; +import org.osgi.framework.Filter; +import org.osgi.framework.FrameworkEvent; +import org.osgi.framework.InvalidSyntaxException; +import org.osgi.framework.ServiceEvent; +import org.osgi.framework.ServiceException; +import org.osgi.framework.ServiceFactory; +import org.osgi.framework.ServiceListener; +import org.osgi.framework.ServiceObjects; +import org.osgi.framework.ServicePermission; +import org.osgi.framework.ServiceReference; +import org.osgi.framework.ServiceRegistration; +import org.osgi.framework.hooks.service.EventHook; +import org.osgi.framework.hooks.service.EventListenerHook; +import org.osgi.framework.hooks.service.FindHook; +import org.osgi.framework.hooks.service.ListenerHook; import org.osgi.framework.hooks.service.ListenerHook.ListenerInfo; /** @@ -97,7 +127,7 @@ public class ServiceRegistry { publishedServicesByClass = new HashMap<>(initialCapacity); publishedServicesByContext = new HashMap<>(initialCapacity); allPublishedServices = new ArrayList<>(initialCapacity); - serviceEventListeners = new HashMap<>(initialCapacity); + serviceEventListeners = new LinkedHashMap<>(initialCapacity); Module systemModule = container.getStorage().getModuleContainer().getModule(0); systemBundleContext = (BundleContextImpl) systemModule.getBundle().getBundleContext(); systemBundleContext.provisionServicesInUseMap(); @@ -819,7 +849,7 @@ public class ServiceRegistry { Set<Map.Entry<ServiceListener, FilteredServiceListener>> systemServiceListenersOrig = null; BundleContextImpl systemContext = null; synchronized (serviceEventListeners) { - listenerSnapshot = new HashMap<>(serviceEventListeners.size()); + listenerSnapshot = new LinkedHashMap<>(serviceEventListeners.size()); for (Map.Entry<BundleContextImpl, CopyOnWriteIdentityMap<ServiceListener, FilteredServiceListener>> entry : serviceEventListeners.entrySet()) { Map<ServiceListener, FilteredServiceListener> listeners = entry.getValue(); if (!listeners.isEmpty()) { |