[X2Go-Commits] [libx2goclient] 12/44: src/x2goclient-network-ssh.c: rewrite x2goclient_network_ssh_kill_subprocesses () to not kill an actual process but spawn an OpenSSH client process executing an exit command for the master connection.

git-admin at x2go.org git-admin at x2go.org
Fri Sep 18 01:55:38 CEST 2020


This is an automated email from the git hooks/post-receive script.

x2go pushed a commit to branch master
in repository libx2goclient.

commit b871c1b39fcb71b7198bcb0094bc19bcd60527b9
Author: Mihai Moldovan <ionic at ionic.de>
Date:   Thu Jul 30 15:05:01 2020 +0200

    src/x2goclient-network-ssh.c: rewrite x2goclient_network_ssh_kill_subprocesses () to not kill an actual process but spawn an OpenSSH client process executing an exit command for the master connection.
---
 src/x2goclient-network-ssh.c | 45 +++++++++++++++++++-------------------------
 1 file changed, 19 insertions(+), 26 deletions(-)

diff --git a/src/x2goclient-network-ssh.c b/src/x2goclient-network-ssh.c
index 48a75a4..fded0cb 100644
--- a/src/x2goclient-network-ssh.c
+++ b/src/x2goclient-network-ssh.c
@@ -699,40 +699,33 @@ static gboolean x2goclient_network_ssh_kill_subprocesses (X2GoClientNetworkSSH *
   g_return_val_if_fail (X2GOCLIENT_IS_NETWORK_SSH (self), ret);
 
   if (self->active_master_conn) {
-    /* FIXME: rework this code! */
-
     /* Cleanup, if necessary. */
     g_log (NULL, G_LOG_LEVEL_DEBUG, "Master connection cleanup required.");
 
-    g_subprocess_force_exit (self->master_conn);
+    GPtrArray *ssh_cmd = g_ptr_array_new_with_free_func (&x2goclient_clear_strings);
+    g_ptr_array_add (ssh_cmd, g_strdup ("ssh"));
 
-    GCancellable *wait_cancel = g_cancellable_new ();
-    GError *wait_error = NULL;
-    while (!(g_subprocess_wait (self->master_conn, wait_cancel, &wait_error))) {
-      /*
-       * Try to wait for subprocess termination really hard.
-       * The wait call should only fail if the operation was cancelled, but
-       * given that we don't do that (explicitly), it should not occur in the
-       * first place.
-       */
-      g_log (NULL, G_LOG_LEVEL_CRITICAL, "Waiting on master connection subprocess termination was cancelled!\nError: %s\nThis should not have happened. Retrying.", wait_error->message);
+    /* Add control path options. */
+    g_ptr_array_add (ssh_cmd, g_strdup ("-o"));
+    g_ptr_array_add (ssh_cmd, g_strdup_printf ("ControlPath=\"%s\"", self->control_path));
 
-      g_clear_error (&wait_error);
-    }
+    /* Add master socket command. */
+    g_ptr_array_add (ssh_cmd, g_strdup ("-O"));
+    g_ptr_array_add (ssh_cmd, g_strdup ("exit"));
 
-    if (0 == g_subprocess_get_if_exited (self->master_conn)) {
-      gint exit_status = g_subprocess_get_exit_status (self->master_conn);
-      g_log (NULL, G_LOG_LEVEL_WARNING, "Master connection subprocess exited with an error; return code: %d", exit_status);
-    }
-    else {
-      g_log (NULL, G_LOG_LEVEL_MESSAGE, "Master connection subprocess exited successfully.");
-    }
+    ret = x2goclient_network_ssh_sshcmd_add_host_port (self, ssh_cmd, NULL);
 
-    g_object_unref (self->master_conn);
-    self->master_conn = NULL;
-    self->active_master_conn = FALSE;
+    if (ret) {
+      /* Zero-terminate. */
+      g_ptr_array_add (ssh_cmd, NULL);
 
-    ret = TRUE;
+      /* Okay, execute. */
+      x2goclient_network_ssh_gptrarray_print_debug (ssh_cmd, "Terminating master connection via:", "OpenSSH client command");
+
+      g_log (NULL, G_LOG_LEVEL_DEBUG, "Launching!");
+      ret = x2goclient_network_ssh_start_sshcmd (self, ssh_cmd, NULL, FALSE);
+      self->active_master_conn = (!(ret));
+    }
   }
 
   return (ret);

--
Alioth's /home/x2go-admin/maintenancescripts/git/hooks/post-receive-email on /srv/git/code.x2go.org/libx2goclient.git


More information about the x2go-commits mailing list