X-Git-Url: http://git.cyclocoop.org/?a=blobdiff_plain;f=includes%2FHooks.php;h=dffc7bcfe859c7d9f60610b2f7a18ce7b0c92f1b;hb=f921aaa135d23e8d8c6e1337328ac3c7792548d6;hp=668c3d9ec1f95b1cd1e2b0a78b1020ec04032815;hpb=30e009794bacc2e3138c372e6ddf876dca2d4a9c;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/Hooks.php b/includes/Hooks.php index 668c3d9ec1..dffc7bcfe8 100644 --- a/includes/Hooks.php +++ b/includes/Hooks.php @@ -127,14 +127,17 @@ class Hooks { * @param string|null $deprecatedVersion Optionally, mark hook as deprecated with version number * @return bool True if no handler aborted the hook * + * @throws Exception + * @throws FatalError + * @throws MWException * @since 1.22 A hook function is not required to return a value for * processing to continue. Not returning a value (or explicitly * returning null) is equivalent to returning true. - * @throws MWException - * @throws FatalError */ public static function run( $event, array $args = array(), $deprecatedVersion = null ) { - wfProfileIn( 'hook: ' . $event ); + $profiler = Profiler::instance(); + $eventPS = $profiler->scopedProfileIn( 'hook: ' . $event ); + foreach ( self::getHandlers( $event ) as $hook ) { // Turn non-array values into an array. (Can't use casting because of objects.) if ( !is_array( $hook ) ) { @@ -193,8 +196,8 @@ class Hooks { $badhookmsg = null; $hook_args = array_merge( $hook, $args ); - // Profile first in case the Profiler causes errors. - wfProfileIn( $func ); + // Profile first in case the Profiler causes errors + $funcPS = $profiler->scopedProfileIn( $func ); set_error_handler( 'Hooks::hookErrorHandler' ); // mark hook as deprecated, if deprecation version is specified @@ -210,8 +213,9 @@ class Hooks { restore_error_handler(); throw $e; } + restore_error_handler(); - wfProfileOut( $func ); + $profiler->scopedProfileOut( $funcPS ); // Process the return value. if ( is_string( $retval ) ) { @@ -224,13 +228,11 @@ class Hooks { "Hook $func has invalid call signature; " . $badhookmsg ); } elseif ( $retval === false ) { - wfProfileOut( 'hook: ' . $event ); // False was returned. Stop processing, but no error. return false; } } - wfProfileOut( 'hook: ' . $event ); return true; }