diff --git a/core/lib/Drupal/Component/EventDispatcher/ContainerAwareEventDispatcher.php b/core/lib/Drupal/Component/EventDispatcher/ContainerAwareEventDispatcher.php index e6c457b..6453832 100644 --- a/core/lib/Drupal/Component/EventDispatcher/ContainerAwareEventDispatcher.php +++ b/core/lib/Drupal/Component/EventDispatcher/ContainerAwareEventDispatcher.php @@ -66,16 +66,17 @@ public function dispatch($event_name, Event $event = NULL) { // Sort listeners if necessary. if (!isset($this->sorted[$event_name])) { krsort($this->listeners[$event_name]); + $this->sorted[$event_name] = TRUE; } // Invoke listeners and resolve callables if necessary. - foreach ($this->listeners[$event_name] as $priority => $definitions) { - foreach ($definitions as $key => $definition) { + foreach ($this->listeners[$event_name] as $priority => &$definitions) { + foreach ($definitions as $key => &$definition) { if (!isset($definition['callable'])) { $definition['callable'] = [$this->container->get($definition['service'][0]), $definition['service'][1]]; } - call_user_func($definition['callable'], $event, $event_name, $this); + $definition['callable']($event, $event_name, $this); if ($event->isPropagationStopped()) { return $event; } @@ -105,11 +106,12 @@ public function getListeners($event_name = NULL) { // Sort listeners if necessary. if (!isset($this->sorted[$event_name])) { krsort($this->listeners[$event_name]); + $this->sorted[$event_name] = TRUE; } // Collect listeners and resolve callables if necessary. - foreach ($this->listeners[$event_name] as $priority => $definitions) { - foreach ($definitions as $key => $definition) { + foreach ($this->listeners[$event_name] as $priority => &$definitions) { + foreach ($definitions as $key => &$definition) { if (!isset($definition['callable'])) { $definition['callable'] = [$this->container->get($definition['service'][0]), $definition['service'][1]]; }