summaryrefslogtreecommitdiff
path: root/modules/gallery/libraries/IdentityProvider.php
diff options
context:
space:
mode:
authorNathan Kinkade <nkinkade@nkinka.de>2010-01-26 16:33:02 +0000
committerNathan Kinkade <nkinkade@nkinka.de>2010-01-26 16:33:02 +0000
commita6f794c20dc3592bcaef17c622413c1b670a20d8 (patch)
tree8819f4d9108b4b98fc1d59a3fb23d28cdfba9555 /modules/gallery/libraries/IdentityProvider.php
parentb21e7be11a0abe57790ec2a2fcca1874632fed8c (diff)
parentaccd00464e2d7e1d1fd0e24e1ee583a7baa73611 (diff)
Merge branch 'master' of git://github.com/gallery/gallery3
Diffstat (limited to 'modules/gallery/libraries/IdentityProvider.php')
-rw-r--r--modules/gallery/libraries/IdentityProvider.php34
1 files changed, 22 insertions, 12 deletions
diff --git a/modules/gallery/libraries/IdentityProvider.php b/modules/gallery/libraries/IdentityProvider.php
index e07838d1..2ed85bd1 100644
--- a/modules/gallery/libraries/IdentityProvider.php
+++ b/modules/gallery/libraries/IdentityProvider.php
@@ -86,18 +86,28 @@ class IdentityProvider_Core {
auth::login($provider->admin_user());
Session::instance()->regenerate();
} catch (Exception $e) {
- // Make sure new provider is not in the database
- module::uninstall($new_provider);
-
- // Lets reset to the current provider so that the gallery installation is still
- // working.
- module::set_var("gallery", "identity_provider", null);
- IdentityProvider::change_provider($current_provider);
- module::activate($current_provider);
- message::error(
- t("Error attempting to enable \"%new_provider\" identity provider, " .
- "reverted to \"%old_provider\" identity provider",
- array("new_provider" => $new_provider, "old_provider" => $current_provider)));
+ static $restore_already_running;
+
+ // In case of error, make an attempt to restore the old provider. Since that's calling into
+ // this function again and can fail, we should be sure not to get into an infinite recursion.
+ if (!$restore_already_running) {
+ $restore_already_running = true;
+
+ // Make sure new provider is not in the database
+ module::uninstall($new_provider);
+
+ // Lets reset to the current provider so that the gallery installation is still
+ // working.
+ module::set_var("gallery", "identity_provider", null);
+ IdentityProvider::change_provider($current_provider);
+ module::activate($current_provider);
+ message::error(
+ t("Error attempting to enable \"%new_provider\" identity provider, " .
+ "reverted to \"%old_provider\" identity provider",
+ array("new_provider" => $new_provider, "old_provider" => $current_provider)));
+
+ $restore_already_running = false;
+ }
throw $e;
}
}