[Spice-devel] [PATCH 2/2] client: don't die if initial agent timeout triggers

Christophe Fergeau cfergeau at redhat.com
Thu Jul 21 08:43:17 PDT 2011


When the client connects to a spice VM, if an agent is detected,
there will be a few messages exchanged to exchange capabilities,
display resolutions, ... This exchange has a timeout in case
something goes wrong. However, when it fires, the client dies.
This commit changes this and lets the client connects to the
guest when the timeout happens.
rhbz #673973
---
 client/red_client.cpp |    6 ++++--
 client/red_client.h   |    6 ++++++
 2 files changed, 10 insertions(+), 2 deletions(-)

diff --git a/client/red_client.cpp b/client/red_client.cpp
index 4a6d3fd..a74fd10 100644
--- a/client/red_client.cpp
+++ b/client/red_client.cpp
@@ -340,7 +340,9 @@ void AgentTimer::response(AbstractProcessLoop& events_loop)
 {
     Application* app = static_cast<Application*>(events_loop.get_owner());
     app->deactivate_interval_timer(this);
-    THROW_ERR(SPICEC_ERROR_CODE_AGENT_TIMEOUT, "vdagent timeout");
+
+    LOG_WARN("timeout while waiting for agent response");
+    _client->send_main_attach_channels();
 }
 
 class MainChannelLoop: public MessageHandlerImp<RedClient, SPICE_CHANNEL_MAIN> {
@@ -371,7 +373,7 @@ RedClient::RedClient(Application& application)
     , _agent_out_msg_size (0)
     , _agent_out_msg_pos (0)
     , _agent_tokens (0)
-    , _agent_timer (new AgentTimer())
+    , _agent_timer (new AgentTimer(this))
     , _agent_caps_size(0)
     , _agent_caps(NULL)
     , _migrate (*this)
diff --git a/client/red_client.h b/client/red_client.h
index 7f5b589..17391e4 100644
--- a/client/red_client.h
+++ b/client/red_client.h
@@ -114,8 +114,14 @@ public:
     }
 };
 
+class RedClient;
+
 class AgentTimer: public Timer {
+public:
     virtual void response(AbstractProcessLoop& events_loop);
+    AgentTimer(RedClient *client) : _client(client) {};
+private:
+    RedClient *_client;
 };
 
 typedef std::map< int, RedPeer::ConnectionOptions::Type> PeerConnectionOptMap;
-- 
1.7.6



More information about the Spice-devel mailing list