Hello community,
here is the log from the commit of package evolution-data-server for
openSUSE:Factory checked in at 2019-07-21 11:31:08
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/evolution-data-server (Old)
and /work/SRC/openSUSE:Factory/.evolution-data-server.new.4126 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "evolution-data-server"
Sun Jul 21 11:31:08 2019 rev:204 rq:716274 version:3.32.4
Changes:
--------
---
/work/SRC/openSUSE:Factory/evolution-data-server/evolution-data-server.changes
2019-06-24 21:50:52.675990456 +0200
+++
/work/SRC/openSUSE:Factory/.evolution-data-server.new.4126/evolution-data-server.changes
2019-07-21 11:31:09.752809551 +0200
@@ -1,0 +2,8 @@
+Mon Jul 15 16:20:35 UTC 2019 - Bjørn Lie <[email protected]>
+
+- Update to version 3.32.4:
+ + Miscellaneous changes in ecmb_modify_object_sync().
+ + Bugs fixed: glgo#GNOME/evolution-data-server#130,
+ glgo#GNOME/evolution-data-server#479.
+
+-------------------------------------------------------------------
Old:
----
evolution-data-server-3.32.3.tar.xz
New:
----
evolution-data-server-3.32.4.tar.xz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ evolution-data-server.spec ++++++
--- /var/tmp/diff_new_pack.wiWyUN/_old 2019-07-21 11:31:10.276809463 +0200
+++ /var/tmp/diff_new_pack.wiWyUN/_new 2019-07-21 11:31:10.280809462 +0200
@@ -30,7 +30,7 @@
%bcond_without introspection
Name: evolution-data-server
-Version: 3.32.3
+Version: 3.32.4
Release: 0
Summary: Evolution Data Server
License: LGPL-2.0-only
++++++ evolution-data-server-3.32.3.tar.xz ->
evolution-data-server-3.32.4.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/evolution-data-server-3.32.3/CMakeLists.txt
new/evolution-data-server-3.32.4/CMakeLists.txt
--- old/evolution-data-server-3.32.3/CMakeLists.txt 2019-06-17
15:21:44.000000000 +0200
+++ new/evolution-data-server-3.32.4/CMakeLists.txt 2019-07-15
10:56:38.000000000 +0200
@@ -4,7 +4,7 @@
cmake_policy(VERSION 3.1)
project(evolution-data-server
- VERSION 3.32.3
+ VERSION 3.32.4
LANGUAGES C CXX)
set(CMAKE_CXX_STANDARD 14)
set(PROJECT_BUGREPORT
"https://gitlab.gnome.org/GNOME/evolution-data-server/issues/")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/evolution-data-server-3.32.3/NEWS
new/evolution-data-server-3.32.4/NEWS
--- old/evolution-data-server-3.32.3/NEWS 2019-06-17 15:21:44.000000000
+0200
+++ new/evolution-data-server-3.32.4/NEWS 2019-07-15 10:56:38.000000000
+0200
@@ -1,3 +1,13 @@
+Evolution-Data-Server 3.32.4 2019-07-15
+---------------------------------------
+
+Bug Fixes:
+ evo-I#479 - Call mail account refresh also after going online ][ (Milan
Crha)
+ I#130 - [CamelOfflineFolder] Multiple downsync operations can run
simultaneously (Milan Crha)
+
+Miscellaneous:
+ Miscellaneous changes in ecmb_modify_object_sync() (Milan Crha)
+
Evolution-Data-Server 3.32.3 2019-06-17
---------------------------------------
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/evolution-data-server-3.32.3/src/calendar/libedata-cal/e-cal-meta-backend.c
new/evolution-data-server-3.32.4/src/calendar/libedata-cal/e-cal-meta-backend.c
---
old/evolution-data-server-3.32.3/src/calendar/libedata-cal/e-cal-meta-backend.c
2019-06-17 15:21:44.000000000 +0200
+++
new/evolution-data-server-3.32.4/src/calendar/libedata-cal/e-cal-meta-backend.c
2019-07-15 10:56:38.000000000 +0200
@@ -1879,11 +1879,11 @@
}
if (split_icalcomp) {
- gchar *new_uid;
+ gchar *split_uid;
- new_uid = e_util_generate_uid ();
- icalcomponent_set_uid (split_icalcomp, new_uid);
- g_free (new_uid);
+ split_uid = e_util_generate_uid ();
+ icalcomponent_set_uid (split_icalcomp,
split_uid);
+ g_free (split_uid);
g_warn_if_fail
(e_cal_component_set_icalcomponent (comp, split_icalcomp));
@@ -1929,8 +1929,9 @@
*out_old_comp = old_comp;
if (out_new_comp) {
if (new_uid) {
- if (!e_cal_cache_get_component (cal_cache, new_uid,
id->rid, out_new_comp, cancellable, NULL))
- *out_new_comp = NULL;
+ if (!e_cal_cache_get_component (cal_cache, new_uid,
id->rid, out_new_comp, cancellable, NULL) &&
+ !e_cal_cache_get_component (cal_cache, new_uid,
NULL, out_new_comp, cancellable, NULL))
+ *out_new_comp = new_comp ? g_object_ref
(new_comp) : NULL;
} else {
*out_new_comp = new_comp ? g_object_ref (new_comp) :
NULL;
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/evolution-data-server-3.32.3/src/camel/camel-offline-folder.c
new/evolution-data-server-3.32.4/src/camel/camel-offline-folder.c
--- old/evolution-data-server-3.32.3/src/camel/camel-offline-folder.c
2019-06-17 15:21:44.000000000 +0200
+++ new/evolution-data-server-3.32.4/src/camel/camel-offline-folder.c
2019-07-15 10:56:38.000000000 +0200
@@ -28,6 +28,7 @@
#include "camel-offline-store.h"
#include "camel-operation.h"
#include "camel-session.h"
+#include "camel-string-utils.h"
#include "camel-utils.h"
#define CAMEL_OFFLINE_FOLDER_GET_PRIVATE(obj) \
@@ -43,6 +44,9 @@
GMutex store_changes_lock;
guint store_changes_id;
gboolean store_changes_after_frozen;
+
+ GMutex ongoing_downloads_lock;
+ GHashTable *ongoing_downloads; /* gchar * UID ~> g_thread_self() */
};
struct _AsyncContext {
@@ -71,6 +75,60 @@
g_slice_free (AsyncContext, async_context);
}
+static gboolean
+offline_folder_synchronize_message_wrapper_sync (CamelFolder *folder,
+ const gchar *uid,
+ GCancellable *cancellable,
+ GError **error)
+{
+ CamelOfflineFolder *offline_folder;
+ gboolean success;
+
+ g_return_val_if_fail (CAMEL_IS_OFFLINE_FOLDER (folder), FALSE);
+ g_return_val_if_fail (uid != NULL, FALSE);
+
+ offline_folder = CAMEL_OFFLINE_FOLDER (folder);
+
+ g_mutex_lock (&offline_folder->priv->ongoing_downloads_lock);
+ /* Another thread is downloading this message already, do not wait for
it,
+ just move on to the next one. In case the previous/ongoing download
+ fails the message won't be downloaded. */
+ if (g_hash_table_contains (offline_folder->priv->ongoing_downloads,
uid)) {
+ if (camel_debug ("downsync")) {
+ printf ("[downsync] %p: (%s : %s): skipping
uid '%s', because it is already downloading by thread %p (this thread is
%p)\n", camel_folder_get_parent_store (folder),
+ camel_service_get_display_name (CAMEL_SERVICE
(camel_folder_get_parent_store (folder))), camel_folder_get_full_name (folder),
+ uid, g_hash_table_lookup
(offline_folder->priv->ongoing_downloads, uid), g_thread_self ());
+ }
+ g_mutex_unlock (&offline_folder->priv->ongoing_downloads_lock);
+ return TRUE;
+ } else {
+ g_hash_table_insert (offline_folder->priv->ongoing_downloads,
(gpointer) camel_pstring_strdup (uid), g_thread_self ());
+ }
+
+ if (camel_debug ("downsync")) {
+ printf ("[downsync] %p: (%s : %s): going to download
uid '%s' in thread %p\n", camel_folder_get_parent_store (folder),
+ camel_service_get_display_name (CAMEL_SERVICE
(camel_folder_get_parent_store (folder))), camel_folder_get_full_name (folder),
+ uid, g_thread_self ());
+ }
+
+ g_mutex_unlock (&offline_folder->priv->ongoing_downloads_lock);
+
+ success = camel_folder_synchronize_message_sync (folder, uid,
cancellable, error);
+
+ g_mutex_lock (&offline_folder->priv->ongoing_downloads_lock);
+ g_warn_if_fail (g_hash_table_remove
(offline_folder->priv->ongoing_downloads, uid));
+
+ if (camel_debug ("downsync")) {
+ printf ("[downsync] %p: (%s : %s): finished download
of uid '%s' in thread %p, %s\n", camel_folder_get_parent_store (folder),
+ camel_service_get_display_name (CAMEL_SERVICE
(camel_folder_get_parent_store (folder))), camel_folder_get_full_name (folder),
+ uid, g_thread_self (), success ? "success" : "failure");
+ }
+
+ g_mutex_unlock (&offline_folder->priv->ongoing_downloads_lock);
+
+ return success;
+}
+
static void
offline_downsync_data_free (OfflineDownsyncData *data)
{
@@ -160,7 +218,7 @@
continue;
}
- success = camel_folder_synchronize_message_sync (
+ success =
offline_folder_synchronize_message_wrapper_sync (
data->folder, uid, cancellable, error);
}
} else {
@@ -386,6 +444,9 @@
CamelOfflineFolder *offline_folder = CAMEL_OFFLINE_FOLDER (object);
g_mutex_clear (&offline_folder->priv->store_changes_lock);
+ g_mutex_clear (&offline_folder->priv->ongoing_downloads_lock);
+
+ g_hash_table_destroy (offline_folder->priv->ongoing_downloads);
/* Chain up to parent's method. */
G_OBJECT_CLASS (camel_offline_folder_parent_class)->finalize (object);
@@ -530,7 +591,7 @@
camel_folder_get_full_name (folder));
/* Stop on failure */
- if (!camel_folder_synchronize_message_sync (folder,
uid, cancellable, &local_error)) {
+ if (!offline_folder_synchronize_message_wrapper_sync
(folder, uid, cancellable, &local_error)) {
if (camel_debug ("downsync")) {
printf ("[downsync] %p: (%s :
%s): aborting, failed to download uid:%s error:%s\n",
camel_folder_get_parent_store (folder),
camel_service_get_display_name
(CAMEL_SERVICE (camel_folder_get_parent_store (folder))),
camel_folder_get_full_name (folder),
@@ -539,10 +600,6 @@
g_clear_error (&local_error);
camel_operation_pop_message (cancellable);
break;
- } else if (camel_debug ("downsync")) {
- printf ("[downsync] %p: (%s : %s): uid
'%s' downloaded\n", camel_folder_get_parent_store (folder),
- camel_service_get_display_name
(CAMEL_SERVICE (camel_folder_get_parent_store (folder))),
camel_folder_get_full_name (folder),
- uid);
}
camel_operation_pop_message (cancellable);
@@ -603,8 +660,10 @@
folder->priv = CAMEL_OFFLINE_FOLDER_GET_PRIVATE (folder);
g_mutex_init (&folder->priv->store_changes_lock);
+ g_mutex_init (&folder->priv->ongoing_downloads_lock);
folder->priv->store_changes_after_frozen = FALSE;
folder->priv->offline_sync = CAMEL_THREE_STATE_INCONSISTENT;
+ folder->priv->ongoing_downloads = g_hash_table_new_full (g_str_hash,
g_str_equal, (GDestroyNotify) camel_pstring_free, NULL);
g_signal_connect (
folder, "changed",
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/evolution-data-server-3.32.3/src/camel/camel-offline-store.c
new/evolution-data-server-3.32.4/src/camel/camel-offline-store.c
--- old/evolution-data-server-3.32.3/src/camel/camel-offline-store.c
2019-06-17 15:21:44.000000000 +0200
+++ new/evolution-data-server-3.32.4/src/camel/camel-offline-store.c
2019-07-15 10:56:38.000000000 +0200
@@ -155,12 +155,7 @@
g_object_notify (object, "online");
else if (g_strcmp0 (pspec->name, "connection-status") == 0 &&
camel_service_get_connection_status (CAMEL_SERVICE (object))
== CAMEL_SERVICE_DISCONNECTED) {
- CamelOfflineStore *store = CAMEL_OFFLINE_STORE (object);
-
- if (store->priv->online) {
- store->priv->online = FALSE;
- g_object_notify (object, "online");
- }
+ g_object_notify (object, "online");
}
/* Chain up to parent's notify() method. */
@@ -253,8 +248,10 @@
g_return_val_if_fail (CAMEL_IS_OFFLINE_STORE (store), FALSE);
- if (camel_offline_store_get_online (store) == online)
+ if (camel_offline_store_get_online (store) == online && (!online ||
+ camel_service_get_connection_status (CAMEL_SERVICE (store)) ==
CAMEL_SERVICE_CONNECTED)) {
return TRUE;
+ }
service = CAMEL_SERVICE (store);
@@ -273,7 +270,8 @@
CAMEL_NETWORK_SERVICE (store));
}
- store_is_online = camel_offline_store_get_online (store);
+ store_is_online = camel_offline_store_get_online (store) &&
+ camel_service_get_connection_status (service) ==
CAMEL_SERVICE_CONNECTED;
/* Returning to online mode is the simpler case. */
if (!store_is_online) {