Hello community,
here is the log from the commit of package evolution-data-server
checked in at Fri Jun 9 01:51:30 CEST 2006.
--------
--- GNOME/evolution-data-server/evolution-data-server.changes 2006-06-08 11:03:45.000000000 +0200
+++ evolution-data-server/evolution-data-server.changes 2006-06-08 17:35:57.000000000 +0200
@@ -1,0 +2,6 @@
+Thu Jun 8 17:34:59 CEST 2006 - fejj@suse.de
+
+- Added bnc-179350.patch which fixes a critical deadlock bug in the
+ GroupWise provider.
+
+-------------------------------------------------------------------
New:
----
bnc-179350.patch
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ evolution-data-server.spec ++++++
--- /var/tmp/diff_new_pack.Ctu5bw/_old 2006-06-09 01:51:00.000000000 +0200
+++ /var/tmp/diff_new_pack.Ctu5bw/_new 2006-06-09 01:51:00.000000000 +0200
@@ -18,7 +18,7 @@
Autoreqprov: on
Summary: Evolution Data Server
Version: 1.6.0
-Release: 57
+Release: 58
Source: ftp://ftp.gnome.org/pub/gnome/sources/evolution-data-server/1.6/%{name}-%{version}.tar.bz2
#Patch3: evolution-data-server-gcc4.patch
Patch5: evolution-data-server-configure.patch
@@ -94,6 +94,7 @@
Patch73: german-translation-eds.diff
Patch74: bnc-181906-eds-ex-crash.diff
Patch75: eds-translations-updated.diff
+Patch76: bnc-179350.patch
Url: http://www.gnome.org
BuildRoot: %{_tmppath}/%{name}-%{version}-build
Requires: libsoup >= 2.2.6 mozilla-nss
@@ -249,6 +250,9 @@
%{prefix}/share/gtk-doc/html/*
%changelog -n evolution-data-server
+* Thu Jun 08 2006 - fejj@suse.de
+- Added bnc-179350.patch which fixes a critical deadlock bug in the
+ GroupWise provider.
* Thu Jun 08 2006 - sragavan@novell.com
- Updated some translation fixes
- Committed patch for bug 181906, which solves a exchange crash.
++++++ bnc-179350.patch ++++++
Index: camel/providers/groupwise/camel-groupwise-folder.c
===================================================================
RCS file: /cvs/gnome/evolution-data-server/camel/providers/groupwise/camel-groupwise-folder.c,v
retrieving revision 1.114.2.12
diff -u -r1.114.2.12 camel-groupwise-folder.c
--- camel/providers/groupwise/camel-groupwise-folder.c 6 Jun 2006 19:51:03 -0000 1.114.2.12
+++ camel/providers/groupwise/camel-groupwise-folder.c 8 Jun 2006 15:32:24 -0000
@@ -63,15 +63,6 @@
#define GROUPWISE_BULK_DELETE_LIMIT 100
static CamelOfflineFolderClass *parent_class = NULL;
-struct _CamelGroupwiseFolderPrivate {
-
-#ifdef ENABLE_THREADS
- EMutex *search_lock; /* for locking the search object */
- EMutex *cache_lock; /* for locking the cache object */
-#endif
-
-};
-
/*prototypes*/
static void groupwise_transfer_messages_to (CamelFolder *source,
GPtrArray *uids,
@@ -94,9 +85,7 @@
#define d(x)
static CamelMimeMessage *
-groupwise_folder_get_message( CamelFolder *folder,
- const char *uid,
- CamelException *ex )
+groupwise_folder_get_message (CamelFolder *folder, const char *uid, CamelException *ex)
{
CamelMimeMessage *msg = NULL;
CamelGroupwiseFolder *gw_folder = CAMEL_GROUPWISE_FOLDER(folder);
@@ -107,11 +96,10 @@
EGwConnectionStatus status;
EGwConnection *cnc;
EGwItem *item;
- CamelStream *stream, *cache_stream;
+ CamelStream *stream;
int errno;
/* see if it is there in cache */
-
mi = (CamelGroupwiseMessageInfo *) camel_folder_summary_uid (folder->summary, uid);
if (mi == NULL) {
camel_exception_setv(ex, CAMEL_EXCEPTION_FOLDER_INVALID_UID,
@@ -119,41 +107,38 @@
return NULL;
}
- cache_stream = camel_data_cache_get (gw_folder->cache, "cache", uid, ex);
- stream = camel_stream_mem_new ();
- if (cache_stream) {
+ CAMEL_SERVICE_LOCK (folder->parent_store, connect_lock);
+
+ if ((stream = camel_data_cache_get (gw_folder->cache, "cache", uid, ex))) {
msg = camel_mime_message_new ();
- camel_stream_reset (stream);
- camel_stream_write_to_stream (cache_stream, stream);
- camel_stream_reset (stream);
if (camel_data_wrapper_construct_from_stream ((CamelDataWrapper *) msg, stream) == -1) {
if (errno == EINTR) {
camel_exception_setv (ex, CAMEL_EXCEPTION_USER_CANCEL, _("User cancelled"));
camel_object_unref (msg);
- camel_object_unref (cache_stream);
camel_object_unref (stream);
camel_message_info_free (&mi->info);
+ CAMEL_SERVICE_UNLOCK (folder->parent_store, connect_lock);
return NULL;
- } else {
- camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM, _("Cannot get message %s: %s"),
- uid, g_strerror (errno));
- camel_object_unref (msg);
- msg = NULL;
}
+
+ camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM, _("Cannot get message %s: %s"),
+ uid, g_strerror (errno));
+ camel_object_unref (stream);
+ camel_object_unref (msg);
+ msg = NULL;
+ } else {
+ camel_object_unref (stream);
+ camel_message_info_free (&mi->info);
+ CAMEL_SERVICE_UNLOCK (folder->parent_store, connect_lock);
+ return msg;
}
- camel_object_unref (cache_stream);
- }
- camel_object_unref (stream);
-
- if (msg != NULL) {
- camel_message_info_free (&mi->info);
- return msg;
}
if (((CamelOfflineStore *) gw_store)->state == CAMEL_OFFLINE_STORE_NETWORK_UNAVAIL) {
camel_exception_set (ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
_("This message is not available in offline mode."));
camel_message_info_free (&mi->info);
+ CAMEL_SERVICE_UNLOCK (folder->parent_store, connect_lock);
return NULL;
}
@@ -162,6 +147,7 @@
camel_exception_set (ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
_("This message is not available in offline mode."));
camel_message_info_free (&mi->info);
+ CAMEL_SERVICE_UNLOCK (folder->parent_store, connect_lock);
return NULL;
}
@@ -173,6 +159,7 @@
g_free (container_id);
camel_exception_set (ex, CAMEL_EXCEPTION_SERVICE_INVALID, _("Could not get message"));
camel_message_info_free (&mi->info);
+ CAMEL_SERVICE_UNLOCK (folder->parent_store, connect_lock);
return NULL;
}
@@ -181,30 +168,30 @@
camel_exception_set (ex, CAMEL_EXCEPTION_SERVICE_INVALID, _("Could not get message"));
g_free (container_id);
camel_message_info_free (&mi->info);
-
+ CAMEL_SERVICE_UNLOCK (folder->parent_store, connect_lock);
return NULL;
}
- if (msg)
- camel_medium_set_header (CAMEL_MEDIUM (msg), "X-Evolution-Source", groupwise_base_url_lookup (priv));
+ camel_medium_set_header (CAMEL_MEDIUM (msg), "X-Evolution-Source", groupwise_base_url_lookup (priv));
- if(!strcmp (folder->full_name, "Sent Items"))
+ if (!strcmp (folder->full_name, "Sent Items"))
goto end; /*Dont cache if its sent items, since we need to Track Status*/
/* add to cache */
- CAMEL_GROUPWISE_FOLDER_LOCK (folder, cache_lock);
- if ((cache_stream = camel_data_cache_add (gw_folder->cache, "cache", uid, NULL))) {
- if (camel_data_wrapper_write_to_stream ((CamelDataWrapper *) msg, cache_stream) == -1
- || camel_stream_flush (cache_stream) == -1)
+ if ((stream = camel_data_cache_add (gw_folder->cache, "cache", uid, NULL))) {
+ if (camel_data_wrapper_write_to_stream ((CamelDataWrapper *) msg, stream) == -1
+ || camel_stream_flush (stream) == -1)
camel_data_cache_remove (gw_folder->cache, "cache", uid, NULL);
- camel_object_unref (cache_stream);
+ camel_object_unref (stream);
}
-
- CAMEL_GROUPWISE_FOLDER_UNLOCK (folder, cache_lock);
end:
+
camel_message_info_free (&mi->info);
g_free (container_id);
+
+ CAMEL_SERVICE_UNLOCK (folder->parent_store, connect_lock);
+
return msg;
}
@@ -411,18 +398,20 @@
summary_path = g_strdup_printf ("%s/summary", folder_dir);
- CAMEL_GROUPWISE_FOLDER_LOCK (folder, cache_lock);
+ CAMEL_SERVICE_LOCK (folder->parent_store, connect_lock);
+
g_free (gw_folder->cache->path);
gw_folder->cache->path = g_strdup (folder_dir);
- CAMEL_GROUPWISE_FOLDER_UNLOCK (folder, cache_lock);
-
+
((CamelFolderClass *)parent_class)->rename(folder, new);
camel_folder_summary_set_filename (folder->summary, summary_path);
-
+
state_file = g_strdup_printf ("%s/cmeta", folder_dir);
camel_object_set(folder, NULL, CAMEL_OBJECT_STATE_FILE, state_file, NULL);
g_free (state_file);
-
+
+ CAMEL_SERVICE_UNLOCK (folder->parent_store, connect_lock);
+
g_free (summary_path);
g_free (folder_dir);
}
@@ -433,10 +422,12 @@
CamelGroupwiseFolder *gw_folder = CAMEL_GROUPWISE_FOLDER(folder);
GPtrArray *matches;
- CAMEL_GROUPWISE_FOLDER_LOCK(folder, search_lock);
+ CAMEL_SERVICE_LOCK (folder->parent_store, connect_lock);
+
camel_folder_search_set_folder (gw_folder->search, folder);
matches = camel_folder_search_search(gw_folder->search, expression, NULL, ex);
- CAMEL_GROUPWISE_FOLDER_UNLOCK(gw_folder, search_lock);
+
+ CAMEL_SERVICE_UNLOCK (folder->parent_store, connect_lock);
return matches;
}
@@ -450,12 +441,12 @@
if (uids->len == 0)
return g_ptr_array_new();
- CAMEL_GROUPWISE_FOLDER_LOCK(folder, search_lock);
-
+ CAMEL_SERVICE_LOCK (folder->parent_store, connect_lock);
+
camel_folder_search_set_folder(gw_folder->search, folder);
matches = camel_folder_search_search(gw_folder->search, expression, uids, ex);
- CAMEL_GROUPWISE_FOLDER_UNLOCK(gw_folder, search_lock);
+ CAMEL_SERVICE_UNLOCK (folder->parent_store, connect_lock);
return matches;
}
@@ -467,12 +458,11 @@
g_return_if_fail (gw_folder->search);
- CAMEL_GROUPWISE_FOLDER_LOCK(folder, search_lock);
+ CAMEL_SERVICE_LOCK (folder->parent_store, connect_lock);
camel_folder_search_free_result (gw_folder->search, uids);
-
- CAMEL_GROUPWISE_FOLDER_UNLOCK(gw_folder, search_lock);
+ CAMEL_SERVICE_UNLOCK (folder->parent_store, connect_lock);
}
/******************* functions specific to Junk Mail Handling**************/
@@ -596,31 +586,29 @@
EGwConnectionStatus status;
EGwConnection *cnc;
int count, i;
-
GList *deleted_items, *deleted_head = NULL;
deleted_items = NULL;
-
-
+
+ CAMEL_SERVICE_LOCK (gw_store, connect_lock);
+
if (((CamelOfflineStore *) gw_store)->state == CAMEL_OFFLINE_STORE_NETWORK_UNAVAIL ||
((CamelService *)gw_store)->status == CAMEL_SERVICE_DISCONNECTED) {
groupwise_sync_summary (folder, ex);
+ CAMEL_SERVICE_UNLOCK (gw_store, connect_lock);
return;
}
cnc = cnc_lookup (priv);
container_id = camel_groupwise_store_container_id_lookup (gw_store, folder->full_name) ;
-
- CAMEL_SERVICE_LOCK (gw_store, connect_lock);
+
if (!camel_groupwise_store_connected (gw_store, ex)) {
CAMEL_SERVICE_UNLOCK (gw_store, connect_lock);
camel_exception_clear (ex);
return;
}
- CAMEL_SERVICE_UNLOCK (gw_store, connect_lock);
-
+
count = camel_folder_summary_count (folder->summary);
- CAMEL_GROUPWISE_FOLDER_LOCK (folder, cache_lock);
for (i=0 ; i