[Spice-devel] [PATCH v2 1/4] spice-channel: Properly error out if reconnect fails
Frediano Ziglio
fziglio at redhat.com
Tue Sep 18 07:53:19 UTC 2018
>
> From: Victor Toso <me at victortoso.com>
>
> The channel_connect() function could fail leading to a spice-channel
> existing as zombie (its coroutine return soon after).
>
> Check if channel_connect() fails and give a proper error signal to
> user when that happens.
>
> Related: https://bugzilla.redhat.com/show_bug.cgi?id=1625550
> Signed-off-by: Victor Toso <victortoso at redhat.com>
> ---
> src/spice-channel.c | 12 ++++++++----
> 1 file changed, 8 insertions(+), 4 deletions(-)
>
> diff --git a/src/spice-channel.c b/src/spice-channel.c
> index 0a5437c..aa035e1 100644
> --- a/src/spice-channel.c
> +++ b/src/spice-channel.c
> @@ -2675,11 +2675,15 @@ cleanup:
> if (c->state == SPICE_CHANNEL_STATE_RECONNECTING ||
> c->state == SPICE_CHANNEL_STATE_SWITCHING) {
> g_warn_if_fail(c->event == SPICE_CHANNEL_NONE);
> - channel_connect(channel, c->tls);
> - g_object_unref(channel);
> - } else
> - g_idle_add(spice_channel_delayed_unref, data);
> + if (channel_connect(channel, c->tls)) {
> + g_object_unref(channel);
> + return NULL;
> + }
> +
> + c->event = SPICE_CHANNEL_ERROR_CONNECT;
> + }
>
> + g_idle_add(spice_channel_delayed_unref, data);
> /* Co-routine exits now - the SpiceChannel object may no longer exist,
> so don't do anything else now unless you like SEGVs */
Patch is good, this comment is now wrong here, channel (or data) is still valid.
Maybe
g_idle_add(spice_channel_delayed_unref, channel);
is more readable (data == channel).
> return NULL;
Frediano
More information about the Spice-devel
mailing list