diff -ur gnome-keyring-2.20.orig/daemon/gkr-daemon-ops.c gnome-keyring-2.20/daemon/gkr-daemon-ops.c --- gnome-keyring-2.20.orig/daemon/gkr-daemon-ops.c 2007-10-03 15:01:34.000000000 +0200 +++ gnome-keyring-2.20/daemon/gkr-daemon-ops.c 2007-10-03 15:01:48.000000000 +0200 @@ -1136,7 +1136,7 @@ g_free (keyring_name); if (res == GNOME_KEYRING_RESULT_OK) - gkr_keyrings_remove (keyring); + gkr_keyrings_remove (keyring, TRUE); return TRUE; } Only in gnome-keyring-2.20/daemon: gkr-daemon-ops.c.orig diff -ur gnome-keyring-2.20.orig/keyrings/gkr-keyring.c gnome-keyring-2.20/keyrings/gkr-keyring.c --- gnome-keyring-2.20.orig/keyrings/gkr-keyring.c 2007-10-03 15:01:34.000000000 +0200 +++ gnome-keyring-2.20/keyrings/gkr-keyring.c 2007-10-03 15:01:48.000000000 +0200 @@ -1211,7 +1211,7 @@ if (!gkr_keyring_update_from_disk (keyring, TRUE)) { /* Failed to re-read, remove the keyring */ g_warning ("Couldn't re-read keyring %s\n", keyring->keyring_name); - gkr_keyrings_remove (keyring); + gkr_keyrings_remove (keyring, TRUE); } return TRUE; diff -ur gnome-keyring-2.20.orig/keyrings/gkr-keyrings.c gnome-keyring-2.20/keyrings/gkr-keyrings.c --- gnome-keyring-2.20.orig/keyrings/gkr-keyrings.c 2007-10-03 15:01:34.000000000 +0200 +++ gnome-keyring-2.20/keyrings/gkr-keyrings.c 2007-10-03 15:01:48.000000000 +0200 @@ -235,7 +235,7 @@ /* Try and update/load it */ if (!gkr_keyring_update_from_disk (keyring, FALSE) || !keyring->keyring_name || !keyring->keyring_name[0]) { - gkr_keyrings_remove (keyring); + gkr_keyrings_remove (keyring, TRUE); } } @@ -257,7 +257,7 @@ keyring = GKR_KEYRING (keyrings->data); if (keyring == session_keyring) session_keyring = NULL; - gkr_keyrings_remove (keyring); + gkr_keyrings_remove (keyring, FALSE); } g_free (default_keyring); @@ -411,7 +411,7 @@ if (!keyring->location) continue; if (g_hash_table_lookup (checks, GUINT_TO_POINTER (keyring->location))) - gkr_keyrings_remove (keyring); + gkr_keyrings_remove (keyring, TRUE); } g_hash_table_destroy (checks); @@ -434,15 +434,19 @@ } void -gkr_keyrings_remove (GkrKeyring *keyring) +gkr_keyrings_remove (GkrKeyring *keyring, + gboolean unset_if_default) { keyrings_init (); - + g_assert (GKR_IS_KEYRING (keyring)); + + if (g_list_find (keyrings, keyring)) { - if (default_keyring && + if (unset_if_default && + default_keyring && strcmp (keyring->keyring_name, default_keyring) == 0) gkr_keyrings_set_default (NULL); diff -ur gnome-keyring-2.20.orig/keyrings/gkr-keyrings.h gnome-keyring-2.20/keyrings/gkr-keyrings.h --- gnome-keyring-2.20.orig/keyrings/gkr-keyrings.h 2007-10-03 15:01:34.000000000 +0200 +++ gnome-keyring-2.20/keyrings/gkr-keyrings.h 2007-10-03 15:01:48.000000000 +0200 @@ -36,7 +36,8 @@ void gkr_keyrings_add (GkrKeyring *keyring); -void gkr_keyrings_remove (GkrKeyring *keyring); +void gkr_keyrings_remove (GkrKeyring *keyring, + gboolean unset_if_default); GkrKeyring* gkr_keyrings_find (const gchar *name);