gnome-keyring r1211 - in trunk: . daemon daemon/keyrings library/tests



Author: nnielsen
Date: Wed Jul 30 15:19:35 2008
New Revision: 1211
URL: http://svn.gnome.org/viewvc/gnome-keyring?rev=1211&view=rev

Log:
	* daemon/gkr-daemon-ops.c:
	* daemon/keyrings/gkr-keyring-binary.c:
	* daemon/keyrings/gkr-keyring-item.c:
	* daemon/keyrings/gkr-keyring-login.c:
	* daemon/keyrings/gkr-keyrings.c:
	* daemon/keyrings/gkr-keyring-textual.c:
	* library/tests/unit-test-keyrings.c: Manage keyring and item 
	reference counting properly. Fixes bug #545456


Modified:
   trunk/ChangeLog
   trunk/daemon/gkr-daemon-ops.c
   trunk/daemon/keyrings/gkr-keyring-binary.c
   trunk/daemon/keyrings/gkr-keyring-item.c
   trunk/daemon/keyrings/gkr-keyring-login.c
   trunk/daemon/keyrings/gkr-keyring-textual.c
   trunk/daemon/keyrings/gkr-keyrings.c
   trunk/library/tests/unit-test-keyrings.c

Modified: trunk/daemon/gkr-daemon-ops.c
==============================================================================
--- trunk/daemon/gkr-daemon-ops.c	(original)
+++ trunk/daemon/gkr-daemon-ops.c	Wed Jul 30 15:19:35 2008
@@ -588,6 +588,9 @@
 
 			/* Set our newly created keyring as the default */
 			gkr_keyrings_set_default (keyring);
+			
+			/* Let go of the initial reference to this object */
+			g_object_unref (keyring);
 		}
 	}
 	
@@ -1171,6 +1174,7 @@
 	if (!item) {
 		item = gkr_keyring_item_create (keyring, type);
 		gkr_keyring_add_item (keyring, item);
+		g_object_unref (item);
 	}
 
 	/* Copy in item type flags */
@@ -1208,6 +1212,7 @@
                 GkrKeyringRequest *req)
 {
 	char *keyring_name;
+	GkrKeyring *keyring;
 	GkrKeyringItem *item;
 	GnomeKeyringOpCode opcode;
 	guint32 item_id;
@@ -1231,8 +1236,9 @@
 	gkr_buffer_add_uint32 (result, res);
 	if (res == GNOME_KEYRING_RESULT_OK) {
 		if (item->keyring) {
-			gkr_keyring_remove_item (item->keyring, item);
-			gkr_keyring_save_to_disk (item->keyring);
+			keyring = item->keyring;
+			gkr_keyring_remove_item (keyring, item);
+			gkr_keyring_save_to_disk (keyring);
 		}
 	}
 

Modified: trunk/daemon/keyrings/gkr-keyring-binary.c
==============================================================================
--- trunk/daemon/keyrings/gkr-keyring-binary.c	(original)
+++ trunk/daemon/keyrings/gkr-keyring-binary.c	Wed Jul 30 15:19:35 2008
@@ -655,6 +655,7 @@
 		if (item == NULL) {
 			item = gkr_keyring_item_new (keyring, items[i].id, items[i].type);
 			gkr_keyring_add_item (keyring, item);
+			g_object_unref (item);
 		}
 		
 		item->locked = locked;

Modified: trunk/daemon/keyrings/gkr-keyring-item.c
==============================================================================
--- trunk/daemon/keyrings/gkr-keyring-item.c	(original)
+++ trunk/daemon/keyrings/gkr-keyring-item.c	Wed Jul 30 15:19:35 2008
@@ -114,7 +114,6 @@
 	GkrKeyringItem *item = GKR_KEYRING_ITEM (obj);
 	
 	if (item->keyring) {
-		gkr_keyring_remove_item (item->keyring, item);
 		g_object_remove_weak_pointer (G_OBJECT (item->keyring), 
 		                              (gpointer*)&(item->keyring));
 		item->keyring = NULL;

Modified: trunk/daemon/keyrings/gkr-keyring-login.c
==============================================================================
--- trunk/daemon/keyrings/gkr-keyring-login.c	(original)
+++ trunk/daemon/keyrings/gkr-keyring-login.c	Wed Jul 30 15:19:35 2008
@@ -237,6 +237,7 @@
 	if (!item) {
 		item = gkr_keyring_item_create (login, type);
 		gkr_keyring_add_item (login, item);
+		g_object_unref (item);
 	}
 	
 	g_free (item->display_name);

Modified: trunk/daemon/keyrings/gkr-keyring-textual.c
==============================================================================
--- trunk/daemon/keyrings/gkr-keyring-textual.c	(original)
+++ trunk/daemon/keyrings/gkr-keyring-textual.c	Wed Jul 30 15:19:35 2008
@@ -431,6 +431,7 @@
 		if (item == NULL) {
 			item = gkr_keyring_item_new (keyring, id, 0);
 			gkr_keyring_add_item (keyring, item);
+			g_object_unref (item);
 		}
 
 		parse_item (file, item, (const gchar**)groups);

Modified: trunk/daemon/keyrings/gkr-keyrings.c
==============================================================================
--- trunk/daemon/keyrings/gkr-keyrings.c	(original)
+++ trunk/daemon/keyrings/gkr-keyrings.c	Wed Jul 30 15:19:35 2008
@@ -191,6 +191,7 @@
 	g_assert (!session_keyring);
 	session_keyring = gkr_keyring_new ("session", 0);
 	gkr_keyrings_add (session_keyring);
+	g_object_unref (session_keyring);
 	
 	g_assert (!location_watch);
 	location_watch = gkr_location_watch_new (NULL, 0, "keyrings", "*.keyring", NULL);
@@ -355,12 +356,13 @@
 	/* Try and load the keyring */
 	if (gkr_location_test_file (location, G_FILE_TEST_IS_REGULAR)) {
 		keyring = gkr_keyring_new ("", location);
-		if (gkr_keyring_update_from_disk (keyring))
+		if (gkr_keyring_update_from_disk (keyring)) {
 			gkr_keyrings_add (keyring);
-		else
-			keyring = NULL;
+			g_object_unref (keyring);
+			return keyring;
+		} 
+		
 		g_object_unref (keyring);
-		return keyring;
 	}
 
 	return NULL;

Modified: trunk/library/tests/unit-test-keyrings.c
==============================================================================
--- trunk/library/tests/unit-test-keyrings.c	(original)
+++ trunk/library/tests/unit-test-keyrings.c	Wed Jul 30 15:19:35 2008
@@ -211,11 +211,11 @@
 	gnome_keyring_attribute_list_append_string (attrs, "dog", "woof");
 	gnome_keyring_attribute_list_append_string (attrs, "bird", "cheep");
 	gnome_keyring_attribute_list_append_string (attrs, "iguana", "");
-	gnome_keyring_attribute_list_append_uint32 (attrs, "num", 3);
+	gnome_keyring_attribute_list_append_uint32 (attrs, "num", 19);
 	
-	/* Create teh item */
-	res = gnome_keyring_item_create_sync (NULL, GNOME_KEYRING_ITEM_GENERIC_SECRET, 
-	                                      "Barnyard", attrs, SECRET, FALSE, &id);
+	/* Create the item */
+	res = gnome_keyring_item_create_sync ("session", GNOME_KEYRING_ITEM_GENERIC_SECRET, 
+	                                      "Barnyard", attrs, SECRET, TRUE, &id);
 	CuAssertIntEquals(cu, GNOME_KEYRING_RESULT_OK, res);
 	
 	/* Now try to find it */
@@ -225,10 +225,10 @@
 
 	f = (GnomeKeyringFound*)found->data;	
 	CuAssert(cu, "Wrong item found", f->item_id == id);
-	CuAssert(cu, "Found in wrong keyring", strcmp (f->keyring, KEYRING_NAME) == 0);
+	CuAssert(cu, "Found in wrong keyring", strcmp (f->keyring, "session") == 0);
 	CuAssert(cu, "Wrong secret came back", strcmp (f->secret, SECRET) == 0);
 	
-	res = gnome_keyring_item_get_attributes_sync (NULL, id, &attrs);
+	res = gnome_keyring_item_get_attributes_sync ("session", id, &attrs);
 	CuAssertIntEquals(cu, GNOME_KEYRING_RESULT_OK, res);
 	
 	/* Make sure that dog does in fact woof */



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]