Blame SOURCES/Properly-remove-watches-when-changing-server-props.patch

622bbc
From 8775c6fb949acecca39f006f18a32bac5c009e5d Mon Sep 17 00:00:00 2001
622bbc
From: Ondrej Holy <oholy@redhat.com>
622bbc
Date: Fri, 24 Aug 2018 15:11:58 +0200
622bbc
Subject: [PATCH 2/3] Properly remove watches when changing server props
622bbc
622bbc
vino_server_init_io_channels calls vino_server_deinit_io_channels
622bbc
at the beginning, however the watches and channels don't have to be
622bbc
removed respective closed, because it relies on rfbListenSock array,
622bbc
which can be already modified as a consequence of changing server
622bbc
properties. Let's call vino_server_deinit_io_channels before changing
622bbc
server properties in order to prevent the following errors:
622bbc
622bbc
rfbCheckFds: accept: Invalid argument
622bbc
622bbc
https://bugzilla.gnome.org/show_bug.cgi?id=796349
622bbc
---
622bbc
 server/vino-server.c | 13 ++++++++++---
622bbc
 1 file changed, 10 insertions(+), 3 deletions(-)
622bbc
622bbc
diff --git a/server/vino-server.c b/server/vino-server.c
622bbc
index b8cd755..7e5599b 100644
622bbc
--- a/server/vino-server.c
622bbc
+++ b/server/vino-server.c
622bbc
@@ -963,8 +963,6 @@ vino_server_init_io_channels(VinoServer *server)
622bbc
   rfbScreenInfoPtr rfb_screen = server->priv->rfb_screen;
622bbc
   int              i;
622bbc
 
622bbc
-  vino_server_deinit_io_channels (server);
622bbc
-
622bbc
   dprintf (RFB, "Creating watch for listening socket [ ");
622bbc
   for (i=0; i < rfb_screen->rfbListenSockTotal; i++)
622bbc
     {
622bbc
@@ -1085,6 +1083,7 @@ vino_server_init_from_screen (VinoServer *server,
622bbc
 
622bbc
   vino_server_update_security_types (server);
622bbc
 
622bbc
+  vino_server_deinit_io_channels (server);
622bbc
   vino_server_init_io_channels (server);
622bbc
 
622bbc
   vino_mdns_add_service ("_rfb._tcp", rfb_screen->rfbPort);
622bbc
@@ -1624,7 +1623,12 @@ vino_server_set_network_interface (VinoServer *server,
622bbc
     server->priv->network_interface = NULL;
622bbc
 
622bbc
   if (server->priv->rfb_screen != NULL)
622bbc
-    rfbSetNetworkInterface (server->priv->rfb_screen, server->priv->network_interface);
622bbc
+    {
622bbc
+      vino_server_deinit_io_channels (server);
622bbc
+      rfbSetNetworkInterface (server->priv->rfb_screen, server->priv->network_interface);
622bbc
+      vino_server_init_io_channels (server);
622bbc
+      vino_server_control_upnp (server);
622bbc
+    }
622bbc
 
622bbc
   g_object_notify (G_OBJECT (server), "network-interface");
622bbc
 }
622bbc
@@ -1651,6 +1655,8 @@ vino_server_set_use_alternative_port (VinoServer *server,
622bbc
 
622bbc
       if (server->priv->rfb_screen)
622bbc
         {
622bbc
+          vino_server_deinit_io_channels (server);
622bbc
+
622bbc
           if (server->priv->use_alternative_port)
622bbc
             rfbSetPort (server->priv->rfb_screen,
622bbc
                         server->priv->alternative_port);
622bbc
@@ -1688,6 +1694,7 @@ vino_server_set_alternative_port (VinoServer *server,
622bbc
       if (server->priv->rfb_screen &&
622bbc
           server->priv->use_alternative_port)
622bbc
 	{
622bbc
+          vino_server_deinit_io_channels (server);
622bbc
 	  rfbSetPort (server->priv->rfb_screen, server->priv->alternative_port);
622bbc
 	  vino_server_init_io_channels (server);
622bbc
 	  vino_server_control_upnp (server);
622bbc
-- 
622bbc
2.17.1
622bbc