[evolution-patches] patch for addressbook bug #58639



problem here is the pending_mutex isn't recursive, and we were calling
e_data_book_view_notify_remove (which locks the mutex) from
e_data_book_view_notify_update (which already held the lock).  Fix is to
call the already-locked version (notify_remove).

The e-book-view-listener change is partially for performance (there's no
reason to do two more round trips to update the refcount -- that I can
see, someone can argue with me if they want :)  Also, once I fixed the
mutex problem, the release_unref call was hanging.  Now everything is
working (and it's a little faster too when doing searches).

Chris
Index: ChangeLog
===================================================================
RCS file: /cvs/gnome/evolution-data-server/addressbook/ChangeLog,v
retrieving revision 1.174
diff -u -r1.174 ChangeLog
--- ChangeLog	12 Jul 2004 18:21:48 -0000	1.174
+++ ChangeLog	12 Jul 2004 18:55:48 -0000
@@ -1,3 +1,16 @@
+2004-07-12  Chris Toshok  <toshok ximian com>
+
+	[ fixes #58639 ]
+	
+	* libebook/e-book-listener.c (impl_BookListener_respond_get_view):
+	no need to wrap the g_signal_emit with dup_ref/release_unref.  the
+	construct for EBookView does a dup_ref of its own.
+
+	* libedata-book/e-data-book-view.c
+	(e_data_book_view_notify_update): don't call
+	e_data_book_view_notify_remove when the pending_mutex is already
+	called.  call notify_remove directly.
+
 2004-07-09  Chris Toshok  <toshok ximian com>
 
 	[ part of fix for #56520 ]
Index: libebook/e-book-listener.c
===================================================================
RCS file: /cvs/gnome/evolution-data-server/addressbook/libebook/e-book-listener.c,v
retrieving revision 1.10
diff -u -r1.10 e-book-listener.c
--- libebook/e-book-listener.c	17 Jun 2004 21:44:46 -0000	1.10
+++ libebook/e-book-listener.c	12 Jul 2004 18:55:49 -0000
@@ -181,11 +181,9 @@
 	response.op        = GetBookViewResponse;
 	response.opid      = opid;
 	response.status    = e_book_listener_convert_status (status);
-	response.book_view = bonobo_object_dup_ref (book_view, ev);
+	response.book_view = book_view;
 
 	g_signal_emit (listener, e_book_listener_signals [RESPONSE], 0, &response);
-
-	bonobo_object_release_unref (response.book_view, ev);
 }
 
 static void
Index: libedata-book/e-data-book-view.c
===================================================================
RCS file: /cvs/gnome/evolution-data-server/addressbook/libedata-book/e-data-book-view.c,v
retrieving revision 1.9
diff -u -r1.9 e-data-book-view.c
--- libedata-book/e-data-book-view.c	22 Jun 2004 18:52:03 -0000	1.9
+++ libedata-book/e-data-book-view.c	12 Jul 2004 18:55:49 -0000
@@ -256,7 +256,7 @@
 		g_free (vcard);
 	} else {
 		if (currently_in_view)
-			e_data_book_view_notify_remove (book_view, id);
+			notify_remove (book_view, id);
 		/* else nothing; we're removing a card that wasn't there */
 	}
 


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