[evolution-patches] Exchange crash fix
- From: "Ahmed Sarfraaz" <asarfraaz novell com>
- To: <evolution-patches lists ximian com>
- Subject: [evolution-patches] Exchange crash fix
- Date: Tue, 29 Mar 2005 03:19:17 -0700
Exchange was crashing randomly while closing evolution. The gconf
notifier was not getting removed while quitting and this was causing the
crash. The attached patch fixes this. 
Also added 2 minor changes for offline check in this patch.
Thanks
-- Sarfraaz
Index: storage/exchange-account.c
===================================================================
RCS file: /cvs/gnome/evolution-exchange/storage/exchange-account.c,v
retrieving revision 1.39
diff -u -p -u -r1.39 exchange-account.c
--- storage/exchange-account.c	11 Mar 2005 07:50:21 -0000	1.39
+++ storage/exchange-account.c	29 Mar 2005 08:45:02 -0000
@@ -1127,15 +1129,12 @@ exchange_account_set_offline (ExchangeAc
 gboolean
 exchange_account_set_online (ExchangeAccount *account)
 {
+	E2kContext *ctx;
 	g_return_val_if_fail (EXCHANGE_IS_ACCOUNT (account), FALSE);
 
 	if (!account->priv->account_online) {
-		account->priv->account_online = TRUE;
-
-		if (exchange_account_connect (account))
-			return TRUE;
-		else
-			return FALSE;
+		ctx = exchange_account_connect (account);
+		return ctx ? TRUE : FALSE;
 	} else {
 		return TRUE;
 	}
Index: storage/exchange-hierarchy-somedav.c
===================================================================
RCS file: /cvs/gnome/evolution-exchange/storage/exchange-hierarchy-somedav.c,v
retrieving revision 1.7
diff -u -p -u -r1.7 exchange-hierarchy-somedav.c
--- storage/exchange-hierarchy-somedav.c	26 Feb 2005 14:19:16 -0000	1.7
+++ storage/exchange-hierarchy-somedav.c	29 Mar 2005 08:45:02 -0000
@@ -137,9 +137,7 @@ scan_subtree (ExchangeHierarchy *hier, E
 		return EXCHANGE_ACCOUNT_FOLDER_OK;
 	hsd->priv->scanned = TRUE;
 
-	/*FIXME : Not sure if this is the right place for this */
-	exchange_account_is_offline (hier->account, &mode);
-	if (mode != ONLINE_MODE)
+	if (offline)
 		return EXCHANGE_ACCOUNT_FOLDER_OK;
 
 	hrefs = exchange_hierarchy_somedav_get_hrefs (hsd);
Index: storage/exchange-offline-listener.c
===================================================================
RCS file: /cvs/gnome/evolution-exchange/storage/exchange-offline-listener.c,v
retrieving revision 1.6
diff -u -p -u -r1.6 exchange-offline-listener.c
--- storage/exchange-offline-listener.c	26 Feb 2005 14:19:16 -0000	1.6
+++ storage/exchange-offline-listener.c	29 Mar 2005 08:45:03 -0000
@@ -35,6 +35,7 @@ static GObjectClass *parent_class = NULL
 struct _ExchangeOfflineListenerPrivate 
 {
 	GConfClient *default_client;
+	guint gconf_cnx;
 	EDataCalFactory *cal_factory;
 	EDataBookFactory *book_factory;
 	gboolean offline;
@@ -86,10 +87,10 @@ setup_offline_listener (ExchangeOfflineL
 	gconf_client_add_dir (priv->default_client, "/apps/evolution/shell", 
 				GCONF_CLIENT_PRELOAD_RECURSIVE,NULL);
 
-	gconf_client_notify_add (priv->default_client, 
+	priv->gconf_cnx = gconf_client_notify_add (priv->default_client, 
 				"/apps/evolution/shell/start_offline", 
 				(GConfClientNotifyFunc)online_status_changed, 
-				ex_offline_listener, NULL, NULL);
+				(gpointer)ex_offline_listener, NULL, NULL);
 
 	value = gconf_client_get (priv->default_client, 
 				"/apps/evolution/shell/start_offline", NULL);
@@ -134,6 +135,8 @@ static void
 exchange_offline_listener_dispose (GObject *object)
 {
 	ExchangeOfflineListener *ex_offline_listener = EXCHANGE_OFFLINE_LISTENER (object);
+	gconf_client_notify_remove (ex_offline_listener->priv->default_client, 
+				ex_offline_listener->priv->gconf_cnx);
 	if (ex_offline_listener->priv->default_client) {
 		g_object_unref (ex_offline_listener->priv->default_client);
 		ex_offline_listener->priv->default_client = NULL;
[
Date Prev][
Date Next]   [
Thread Prev][
Thread Next]   
[
Thread Index]
[
Date Index]
[
Author Index]