[evolution-data-server/gnome-3-20] [CalDAV] Backend not initialized when asked to authenticate
- From: Milan Crha <mcrha src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [evolution-data-server/gnome-3-20] [CalDAV] Backend not initialized when asked to authenticate
- Date: Wed, 13 Apr 2016 14:01:00 +0000 (UTC)
commit de61858973aa496b924f2c38ce258eb47061b9a3
Author: Milan Crha <mcrha redhat com>
Date: Wed Apr 13 15:52:23 2016 +0200
[CalDAV] Backend not initialized when asked to authenticate
There could happen a race condition where one thread was opening
the calendar, but another thread was processing an authentication
request and that later thread won the race for the busy_lock, but
the backend wasn't initialized, thus the priv->uri was still NULL
and a runtime warning:
> soup_message_new: assertion 'uri_string != NULL' failed
had been printed on the factory console. The reason was that
the collection backend called authenticate for its children. Count
with this case and initialize the backend when needed, rather than
fake-fail or fake-reject the credentials in the authenticate callback,
because the fake response can have side effects on the credentials.
calendar/backends/caldav/e-cal-backend-caldav.c | 6 ++++--
1 files changed, 4 insertions(+), 2 deletions(-)
---
diff --git a/calendar/backends/caldav/e-cal-backend-caldav.c b/calendar/backends/caldav/e-cal-backend-caldav.c
index a79ec36..94e2cce 100644
--- a/calendar/backends/caldav/e-cal-backend-caldav.c
+++ b/calendar/backends/caldav/e-cal-backend-caldav.c
@@ -2809,8 +2809,8 @@ initialize_backend (ECalBackendCalDAV *cbdav,
if (!g_signal_handler_find (G_OBJECT (source), G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA, 0, 0, NULL,
caldav_source_changed_cb, cbdav))
g_signal_connect (G_OBJECT (source), "changed", G_CALLBACK (caldav_source_changed_cb), cbdav);
+ cbdav->priv->loaded = TRUE;
cbdav->priv->do_offline = e_source_offline_get_stay_synchronized (offline_extension);
-
cbdav->priv->auth_required = e_source_authentication_required (auth_extension);
soup_uri = e_source_webdav_dup_soup_uri (webdav_extension);
@@ -2937,6 +2937,9 @@ open_calendar_wrapper (ECalBackendCalDAV *cbdav,
g_return_val_if_fail (cbdav != NULL, FALSE);
+ if (!cbdav->priv->loaded && !initialize_backend (cbdav, error))
+ return FALSE;
+
if (!caldav_maybe_prepare_bearer_auth (cbdav, cancellable, error))
return FALSE;
@@ -3019,7 +3022,6 @@ caldav_do_open (ECalBackendSync *backend,
return;
}
- cbdav->priv->loaded = TRUE;
cbdav->priv->opened = TRUE;
cbdav->priv->is_google = FALSE;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]