Merge "Some cleanups to MWExceptionHandler::handleException"
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Mon, 6 Apr 2015 20:44:54 +0000 (20:44 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Mon, 6 Apr 2015 20:44:54 +0000 (20:44 +0000)
1  2 
includes/exception/MWExceptionHandler.php

@@@ -150,22 -150,24 +150,24 @@@ class MWExceptionHandler 
         * @since 1.25
         * @param Exception $e
         */
-       public static function handleException( $e ) {
-               global $wgFullyInitialised;
+       public static function handleException( Exception $e ) {
+               try {
+                       // Rollback DBs to avoid transaction notices. This may fail
+                       // to rollback some DB due to connection issues or exceptions.
+                       // However, any sane DB driver will rollback implicitly anyway.
+                       self::rollbackMasterChangesAndLog( $e );
+               } catch ( DBError $e2 ) {
+                       // If the DB is unreacheable, rollback() will throw an error
+                       // and the error report() method might need messages from the DB,
+                       // which would result in an exception loop. PHP may escalate such
+                       // errors to "Exception thrown without a stack frame" fatals, but
+                       // it's better to be explicit here.
+                       self::logException( $e2 );
+               }
  
-               self::rollbackMasterChangesAndLog( $e );
                self::logException( $e );
                self::report( $e );
  
-               // Final cleanup
-               if ( $wgFullyInitialised ) {
-                       try {
-                               // uses $wgRequest, hence the $wgFullyInitialised condition
-                               wfLogProfilingData();
-                       } catch ( Exception $e ) {
-                       }
-               }
                // Exit value should be nonzero for the benefit of shell jobs
                exit( 1 );
        }
@@@ -349,7 -351,7 +351,7 @@@ TXT
         * returns the requested URL. Otherwise, returns false.
         *
         * @since 1.23
 -       * @return string|bool
 +       * @return string|false
         */
        public static function getURL() {
                global $wgRequest;
         * @param Exception $e
         * @param bool $pretty Add non-significant whitespace to improve readability (default: false).
         * @param int $escaping Bitfield consisting of FormatJson::.*_OK class constants.
 -       * @return string|bool JSON string if successful; false upon failure
 +       * @return string|false JSON string if successful; false upon failure
         */
        public static function jsonSerializeException( Exception $e, $pretty = false, $escaping = 0 ) {
                global $wgLogExceptionBacktrace;