summaryrefslogtreecommitdiff
path: root/0002-deadlock-on-op-cancel.patch
diff options
context:
space:
mode:
authorCoprDistGit <infra@openeuler.org>2024-08-01 14:38:24 +0000
committerCoprDistGit <infra@openeuler.org>2024-08-01 14:38:24 +0000
commit9b931dbba7f407c834aec10eb2ec380460eab9ab (patch)
treeaf556cd3bdd05df91489956763d58fe9c2d4389e /0002-deadlock-on-op-cancel.patch
parent17d612cc1a22e679ed21beca4954e91b0df877bf (diff)
automatic import of evolution-ewsopeneuler24.03_LTSopeneuler23.09
Diffstat (limited to '0002-deadlock-on-op-cancel.patch')
-rw-r--r--0002-deadlock-on-op-cancel.patch45
1 files changed, 45 insertions, 0 deletions
diff --git a/0002-deadlock-on-op-cancel.patch b/0002-deadlock-on-op-cancel.patch
new file mode 100644
index 0000000..dd01a12
--- /dev/null
+++ b/0002-deadlock-on-op-cancel.patch
@@ -0,0 +1,45 @@
+From a80c55fee430452072540f06a1ae1271cd7a9650 Mon Sep 17 00:00:00 2001
+Date: Tue, 31 Aug 2021 17:40:07 +0200
+Subject: [PATCH] EEwsConnection: Release queue lock as soon as possible in
+ ews_next_request()
+
+This could cause a deadlock when other thread cancels an ongoing
+request (the ews_next_request() thread inside the e_ews_connection_utils_prepare_message())
+and the ews_cancel_request() is called as the callback to the GCancellable::cancelled
+signal.
+---
+ src/EWS/common/e-ews-connection.c | 6 ++----
+ 1 file changed, 2 insertions(+), 4 deletions(-)
+
+diff --git a/src/EWS/common/e-ews-connection.c b/src/EWS/common/e-ews-connection.c
+index 1ecacb19..0d7dcb25 100644
+--- a/src/EWS/common/e-ews-connection.c
++++ b/src/EWS/common/e-ews-connection.c
+@@ -711,22 +711,20 @@ ews_next_request (gpointer _cnc)
+ /* Add to active job queue */
+ cnc->priv->active_job_queue = g_slist_append (cnc->priv->active_job_queue, node);
+
++ QUEUE_UNLOCK (cnc);
++
+ if (cnc->priv->soup_session) {
+ SoupMessage *msg = SOUP_MESSAGE (node->msg);
+
+ if (!e_ews_connection_utils_prepare_message (cnc, NULL, msg, node->cancellable)) {
+ e_ews_debug_dump_raw_soup_request (msg);
+- QUEUE_UNLOCK (cnc);
+
+ ews_response_cb (cnc->priv->soup_session, msg, node);
+ } else {
+ e_ews_debug_dump_raw_soup_request (msg);
+ soup_session_queue_message (cnc->priv->soup_session, msg, ews_response_cb, node);
+- QUEUE_UNLOCK (cnc);
+ }
+ } else {
+- QUEUE_UNLOCK (cnc);
+-
+ ews_cancel_request (NULL, node);
+ }
+
+--
+GitLab
+