From 8cb3706df5ad54c654bffb76a69ac0ca1006521e Mon Sep 17 00:00:00 2001
From: Michael Hamann <michael@content-space.de>
Date: Fri, 11 May 2012 10:33:15 +0200
Subject: [PATCH] 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.
---
 inc/events.php | 6 +++---
 1 file 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;
+            }
         }
     }
 }
-- 
GitLab