[Spice-devel] [spice-gtk 1/2] Reenable call to switch_protocol() on protocol version mismatches

Marc-André Lureau marcandre.lureau at gmail.com
Thu Oct 10 17:18:11 CEST 2013


ack

On Thu, Oct 10, 2013 at 5:15 PM, Christophe Fergeau <cfergeau at redhat.com> wrote:
> This partially reverts b19acbc. This commit broke the fallback
> to the old protocol as it added a check for c->peer_msg != NULL
> before calling switch_protocol(), but mismatch between local
> and remote protocol versions is detected before c->peer_msg is
> allocated, so:
>     if (c->peer_msg != NULL && c->link_hdr.major_version != 1) {
>          SPICE_DEBUG("%s: error, switching to protocol 1 (spice 0.4)",
> c->name);
>          spice_channel_switch_protocol(channel, 1);
>          return TRUE;
>     }
> will never get triggered when c->peer_hdr.major_version !=
> c->link_hdr.major_version
>
> The crash described in b19acbc occurred when calling
> spice_channel_recv_link_msg() in spice_channel_coroutine()
> after a call to spice_channel_recv_link_hdr() failed and did
> not set c->peer_msg.
>
> This commit removes the c>peer_msg check done before calling
> spice_channel_switch_protocol() so that it gets called when needed,
> but makes sure that we return FALSE to indicate that an error happened
> and that we need to reconnect. This way we won't try to call
> spice_channel_recv_link_msg() when c->peer_msg is NULL.
> ---
>  gtk/spice-channel.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/gtk/spice-channel.c b/gtk/spice-channel.c
> index 1ee050e..c0e7bba 100644
> --- a/gtk/spice-channel.c
> +++ b/gtk/spice-channel.c
> @@ -1214,10 +1214,10 @@ error:
>      /* Windows socket seems to give early CONNRESET errors. The server
>         does not linger when closing the socket if the protocol is
>         incompatible. Try with the oldest protocol in this case: */
> -    if (c->peer_msg != NULL && c->link_hdr.major_version != 1) {
> +    if (c->link_hdr.major_version != 1) {
>          SPICE_DEBUG("%s: error, switching to protocol 1 (spice 0.4)", c->name);
>          spice_channel_switch_protocol(channel, 1);
> -        return TRUE;
> +        return FALSE;
>      }
>
>      emit_main_context(channel, SPICE_CHANNEL_EVENT, SPICE_CHANNEL_ERROR_LINK);
> --
> 1.8.3.1
>
> _______________________________________________
> Spice-devel mailing list
> Spice-devel at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/spice-devel



-- 
Marc-André Lureau


More information about the Spice-devel mailing list