summaryrefslogtreecommitdiffstats
path: root/server/red_channel.c
diff options
context:
space:
mode:
authorHans de Goede <hdegoede@redhat.com>2012-03-10 13:59:30 +0100
committerHans de Goede <hdegoede@redhat.com>2012-03-12 12:10:22 +0100
commitb023f85ebda1e077d2456ce9e443ea6b3904d58f (patch)
tree673cd05dd66f388590fe032af005a7e22e419908 /server/red_channel.c
parent63e1514ccbcdbf122c4f61f5a9511db586b7ae0d (diff)
downloadspice-b023f85ebda1e077d2456ce9e443ea6b3904d58f.tar.gz
spice-b023f85ebda1e077d2456ce9e443ea6b3904d58f.tar.xz
spice-b023f85ebda1e077d2456ce9e443ea6b3904d58f.zip
red_channel: Use the channel core to remove the stream watch on disconnect
We allow channels to have different core implementations, but we were relying on reds_stream_free to remove the stream watch on disconnect, and reds_stream_free always uses the qemu core implementation. So far we were getting away with this since all the alternative core implementations always return NULL from watch_add. But: 1) The code before this patch clearly was not correct, since it was matching a channel-core watch_add with a qemu-core watch_remove 2) I plan to move red_worker over to actually using an alternative watch implementation at which point this becomes a real problem Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Diffstat (limited to 'server/red_channel.c')
-rw-r--r--server/red_channel.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/server/red_channel.c b/server/red_channel.c
index 13cc5251..5f906e6b 100644
--- a/server/red_channel.c
+++ b/server/red_channel.c
@@ -1194,6 +1194,10 @@ void red_channel_client_disconnect(RedChannelClient *rcc)
if (rcc->channel->channel_cbs.pre_disconnect) {
rcc->channel->channel_cbs.pre_disconnect(rcc);
}
+ if (rcc->stream->watch) {
+ rcc->channel->core->watch_remove(rcc->stream->watch);
+ rcc->stream->watch = NULL;
+ }
reds_stream_free(rcc->stream);
rcc->stream = NULL;
red_channel_remove_client(rcc);