[glib-networking/mcatanzaro/handshake-op-cancel: 4/4] Make handshake ops ignore cancellation




commit 30ad18457b3ea71fbbc6c85964ddb7add464c548
Author: Michael Catanzaro <mcatanzaro redhat com>
Date:   Tue Nov 30 11:18:08 2021 -0600

    Make handshake ops ignore cancellation
    
    This is bad, because it means the operation will no longer complete
    immediately if cancelled by the API user. But it's better than crashing,
    which is what is happening now. The underlying handshake operation is
    synchronous, and this is tough to change, so we currently use
    g_task_set_return_on_cancel() to fake it: this lets the API user think
    the operation has completed, even if it's still running on the handshake
    thread. Problem is this is broken and cannot be fixed easily:
    glib-networking is not actually prepared for the task to finish early
    like this. For now, ignoring cancellation is the most practical
    solution to avoid crashes.
    
    Of course this is not a good long-term solution. I have added a bullet
    point to #89 in order to ensure I don't forget that we need to fix
    cancellation.
    
    Fixes #97, fixes #176

 tls/base/gtlsconnection-base.c | 2 --
 1 file changed, 2 deletions(-)
---
diff --git a/tls/base/gtlsconnection-base.c b/tls/base/gtlsconnection-base.c
index d01ba2be..bcbdf499 100644
--- a/tls/base/gtlsconnection-base.c
+++ b/tls/base/gtlsconnection-base.c
@@ -1741,7 +1741,6 @@ g_tls_connection_base_handshake (GTlsConnection   *conn,
   task = g_task_new (conn, cancellable, sync_handshake_thread_completed, NULL);
   g_task_set_source_tag (task, g_tls_connection_base_handshake);
   g_task_set_name (task, "[glib-networking] g_tls_connection_base_handshake");
-  g_task_set_return_on_cancel (task, TRUE);
 
   timeout = g_new0 (gint64, 1);
   *timeout = -1; /* blocking */
@@ -1984,7 +1983,6 @@ do_implicit_handshake (GTlsConnectionBase  *tls,
 
       g_mutex_unlock (&priv->op_mutex);
 
-      g_task_set_return_on_cancel (priv->implicit_handshake, TRUE);
       g_task_run_in_thread (priv->implicit_handshake, handshake_thread);
 
       crank_sync_handshake_context (tls, cancellable);


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]