diff -u b/core/lib/Drupal/Core/DependencyInjection/Compiler/RegisterKernelListenersPass.php b/core/lib/Drupal/Core/DependencyInjection/Compiler/RegisterKernelListenersPass.php --- b/core/lib/Drupal/Core/DependencyInjection/Compiler/RegisterKernelListenersPass.php +++ b/core/lib/Drupal/Core/DependencyInjection/Compiler/RegisterKernelListenersPass.php @@ -19,7 +19,6 @@ $definition = $container->getDefinition('event_dispatcher'); $event_subscriber_info = []; - $priority = []; foreach ($container->findTaggedServiceIds('event_subscriber') as $id => $attributes) { // We must assume that the class value has been correctly filled, even if the service is created by a factory @@ -34,23 +33,24 @@ // Get all subscribed events. foreach ($class::getSubscribedEvents() as $event_name => $params) { if (is_string($params)) { - $event_subscriber_info[$event_name][] = array($id, $params); - $priority[$event_name][] = 0; + $priority = 0; + $event_subscriber_info[$event_name][$priority][] = array($id, $params, $priority); } elseif (is_string($params[0])) { - $event_subscriber_info[$event_name][] = array($id, $params[0]); - $priority[$event_name][] = isset($params[1]) ? $params[1] : 0; + $priority = isset($params[1]) ? $params[1] : 0; + $event_subscriber_info[$event_name][$priority][] = array($id, $params[0], $priority); } else { foreach ($params as $listener) { - $event_subscriber_info[$event_name][] = array($id, $listener[0]); - $priority[$event_name][] = isset($listener[1]) ? $listener[1] : 0; + $priority = isset($listener[1]) ? $listener[1] : 0; + $event_subscriber_info[$event_name][$priority][] = array($id, $listener[0], $priority); } } } } - foreach ($priority as $event_name => $sort) { - array_multisort($sort, SORT_NUMERIC, SORT_DESC, $event_subscriber_info[$event_name]); + foreach (array_keys($event_subscriber_info) as $event_name) { + krsort($event_subscriber_info[$event_name]); + $event_subscriber_info[$event_name] = call_user_func_array('array_merge', $event_subscriber_info[$event_name]); } $definition->addArgument($event_subscriber_info); }