Bug 312063 SelectionServiceImpl should use ListenerList instead of a HashSet
HashSets are not thread-safe and does not guarantee event order. :(
bundles/org.eclipse.e4.ui.workbench/src/org/eclipse/e4/workbench/ui/internal/SelectionServiceImpl.java
.get(ESelectionService.class.getName());
				for (Entry<String, Set<ISelectionListener>> entry : targetedListeners.entrySet()) {
					String partId = entry.getKey();
					for (ISelectionListener listener : entry.getValue()) {
						selectionService.removeSelectionListener(partId, listener);
					}
				}
			}
		}
		genericListeners.clear();
		targetedListeners.clear();
		eventBroker.unsubscribe(eventHandler);
	}
	@PostConstruct
	void postConstruct() {
		eventBroker
				.subscribe(UIEvents.buildTopic(UIEvents.Context.TOPIC, UIEvents.Context.CONTEXT),
						eventHandler);
		for (MPart part : partService.getParts()) {
			track(part);
		}
	}
	@Inject
	void setPart(@Optional @Named(IServiceConstants.ACTIVE_PART) final MPart part) {
		if ((part != null) && (activePart != part)) {
			activePart = part;
			IEclipseContext rootContext = serviceRoot.getContext();
			if (rootContext == context) {
				IEclipseContext partContext = part.getContext();
				if (partContext != null) {