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

Alon Levy alevy at redhat.com
Thu Jul 21 14:11:31 PDT 2011


On Thu, Jul 21, 2011 at 05:43:17PM +0200, Christophe Fergeau wrote:
> 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

ACK.

> ---
>  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
> 
> _______________________________________________
> Spice-devel mailing list
> Spice-devel at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/spice-devel


More information about the Spice-devel mailing list