summaryrefslogtreecommitdiff
path: root/inc/events.php
diff options
context:
space:
mode:
authorMichael Hamann <michael@content-space.de>2012-05-11 10:33:15 +0200
committerMichael Hamann <michael@content-space.de>2012-05-11 11:34:42 +0200
commit8cb3706df5ad54c654bffb76a69ac0ca1006521e (patch)
tree286cd7e3c2a9a3f0780bcece988bc14f7dc1aada /inc/events.php
parent2daedc0b7ff9126ebb9855f6b8b39f830bd625ed (diff)
downloadrpg-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.
Diffstat (limited to 'inc/events.php')
-rw-r--r--inc/events.php6
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;
+ }
}
}
}