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

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