diff options
author | Michael Hamann <michael@content-space.de> | 2012-05-11 10:33:15 +0200 |
---|---|---|
committer | Michael Hamann <michael@content-space.de> | 2012-05-11 11:34:42 +0200 |
commit | 8cb3706df5ad54c654bffb76a69ac0ca1006521e (patch) | |
tree | 286cd7e3c2a9a3f0780bcece988bc14f7dc1aada | |
parent | 2daedc0b7ff9126ebb9855f6b8b39f830bd625ed (diff) | |
download | rpg-8cb3706df5ad54c654bffb76a69ac0ca1006521e.tar.gz rpg-8cb3706df5ad54c654bffb76a69ac0ca1006521e.tar.bz2 |
Fix nested triggering of the same event
Previously when in an event handler the same event was triggered again,
only the handlers for the second event invocation were all executed, the
handling of the "outer" event stopped after the handling of the inner
event as they both used the same iterator of the hooks array. This
caused caching bugs e.g. when both the include and the indexmenu plugin
were enabled as both of them load metadata in the cache handler which
triggers another renderer cache event.
-rw-r--r-- | inc/events.php | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/inc/events.php b/inc/events.php index 09f3f3c0c..4e81f85c8 100644 --- a/inc/events.php +++ b/inc/events.php @@ -158,8 +158,7 @@ class Doku_Event_Handler { $evt_name = $event->name . ($advise ? '_'.$advise : '_BEFORE'); if (!empty($this->_hooks[$evt_name])) { - $hook = reset($this->_hooks[$evt_name]); - do { + foreach ($this->_hooks[$evt_name] as $hook) { // list($obj, $method, $param) = $hook; $obj =& $hook[0]; $method = $hook[1]; @@ -171,7 +170,8 @@ class Doku_Event_Handler { $obj->$method($event, $param); } - } while ($event->_continue && $hook = next($this->_hooks[$evt_name])); + if (!$event->_continue) break; + } } } } |