[evolution-ews] Bug 746513 - Constant stream of invalid requests for subscription events
- From: Fabiano Fidêncio <ffidencio src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [evolution-ews] Bug 746513 - Constant stream of invalid requests for subscription events
- Date: Mon, 30 Mar 2015 12:35:50 +0000 (UTC)
commit 472064f8f6e62b971a32df6c5b6cfdb52eb6b539
Author: Fabiano Fidêncio <fidencio redhat com>
Date: Mon Mar 30 08:39:22 2015 +0200
Bug 746513 - Constant stream of invalid requests for subscription events
Once an error happens in the streaming, cancel any pending operations
instead of keeping sending bogus requests over and over again to the
server.
src/server/e-ews-notification.c | 15 +++++++++++----
1 files changed, 11 insertions(+), 4 deletions(-)
---
diff --git a/src/server/e-ews-notification.c b/src/server/e-ews-notification.c
index c45ecb2..674440f 100644
--- a/src/server/e-ews-notification.c
+++ b/src/server/e-ews-notification.c
@@ -589,7 +589,7 @@ ews_notification_handle_events_param (ESoapParameter *node,
*events = g_slist_reverse (*events);
}
-static void
+static gboolean
ews_notification_fire_events_from_response (EEwsNotification *notification,
ESoapResponse *response)
{
@@ -605,7 +605,7 @@ ews_notification_fire_events_from_response (EEwsNotification *notification,
if (error != NULL) {
g_warning (G_STRLOC ": %s\n", error->message);
g_error_free (error);
- return;
+ return FALSE;
}
subparam = e_soap_parameter_get_first_child (param);
@@ -617,7 +617,7 @@ ews_notification_fire_events_from_response (EEwsNotification *notification,
g_warning (G_STRLOC ": %s\n", error->message);
g_error_free (error);
g_slist_free_full (events, (GDestroyNotify) e_ews_notification_event_free);
- return;
+ return FALSE;
}
if (E_EWS_CONNECTION_UTILS_CHECK_ELEMENT (name, "GetStreamingEventsResponseMessage")) {
@@ -639,6 +639,8 @@ ews_notification_fire_events_from_response (EEwsNotification *notification,
g_signal_emit_by_name (notification->priv->connection, "server-notification", events);
g_slist_free_full (events, (GDestroyNotify) e_ews_notification_event_free);
}
+
+ return TRUE;
}
static void
@@ -693,7 +695,12 @@ ews_notification_soup_got_chunk (SoupMessage *msg,
if (response == NULL)
break;
- ews_notification_fire_events_from_response (notification, response);
+ if (!ews_notification_fire_events_from_response (notification, response)) {
+ soup_session_abort (notification->priv->soup_session);
+
+ g_object_unref (response);
+ break;
+ }
g_object_unref (response);
notification->priv->chunk = g_byte_array_remove_range (notification->priv->chunk, 0, len);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]