[Spice-devel] [PATCH spice-gtk] spice-channel: return if has_error is TRUE in spice_channel_write_msg

Jakub Janků jjanku at redhat.com
Wed Jun 26 08:02:22 UTC 2019


Avoid linearizing if the message isn't written out anyway
(spice_channel_flush_wire checks() this condition as well).

This also silences the following error:

    (spicy:32087): GSpice-CRITICAL **: 16:22:03.147: spice_session_get_read_only: assertion 'SPICE_IS_SESSION(self)' failed

that can be seen if the channel gets disconnected
by the session while having non-empty write queue.

spice_session_channel_destroy() sets channel->priv->session to NULL,
but spice_channel_write_msg() subsequently attempts to call
spice_session_get_read_only() with NULL pointer.

Signed-off-by: Jakub Janků <jjanku at redhat.com>
---
 src/spice-channel.c | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/src/spice-channel.c b/src/spice-channel.c
index 61de177..aa80edf 100644
--- a/src/spice-channel.c
+++ b/src/spice-channel.c
@@ -897,6 +897,11 @@ static void spice_channel_write_msg(SpiceChannel *channel, SpiceMsgOut *out)
     g_return_if_fail(out != NULL);
     g_return_if_fail(channel == out->channel);
 
+    if (channel->priv->has_error) {
+        spice_msg_out_unref(out);
+        return;
+    }
+
     if (out->ro_check &&
         spice_channel_get_read_only(channel)) {
         g_warning("Try to send message while read-only. Please report a bug.");
-- 
2.21.0



More information about the Spice-devel mailing list