summaryrefslogtreecommitdiffstats
path: root/chardev
diff options
context:
space:
mode:
authorMarc-André Lureau2019-02-21 12:06:53 +0100
committerGerd Hoffmann2019-02-21 14:09:17 +0100
commit805189ab14380a963db445aa083d5049c523486c (patch)
tree9328ce707ba6aa209648d115a54483d3a04ed3b5 /chardev
parentui/gtk: Fix the license information (diff)
downloadqemu-805189ab14380a963db445aa083d5049c523486c.tar.gz
qemu-805189ab14380a963db445aa083d5049c523486c.tar.xz
qemu-805189ab14380a963db445aa083d5049c523486c.zip
char/spice: trigger HUP event
Inform the front-end of disconnected state (spice client disconnected). This will wakeup the source handler immediately, so it can detect the disconnection asap. Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com> Tested-by: Victor Toso <victortoso@redhat.com> Message-id: 20190221110703.5775-2-marcandre.lureau@redhat.com Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
Diffstat (limited to 'chardev')
-rw-r--r--chardev/spice.c15
1 files changed, 14 insertions, 1 deletions
diff --git a/chardev/spice.c b/chardev/spice.c
index 173c257949..c2baeb5461 100644
--- a/chardev/spice.c
+++ b/chardev/spice.c
@@ -148,15 +148,25 @@ static void vmc_unregister_interface(SpiceChardev *scd)
static gboolean spice_char_source_prepare(GSource *source, gint *timeout)
{
SpiceCharSource *src = (SpiceCharSource *)source;
+ Chardev *chr = CHARDEV(src->scd);
*timeout = -1;
+ if (!chr->be_open) {
+ return true;
+ }
+
return !src->scd->blocked;
}
static gboolean spice_char_source_check(GSource *source)
{
SpiceCharSource *src = (SpiceCharSource *)source;
+ Chardev *chr = CHARDEV(src->scd);
+
+ if (!chr->be_open) {
+ return true;
+ }
return !src->scd->blocked;
}
@@ -164,9 +174,12 @@ static gboolean spice_char_source_check(GSource *source)
static gboolean spice_char_source_dispatch(GSource *source,
GSourceFunc callback, gpointer user_data)
{
+ SpiceCharSource *src = (SpiceCharSource *)source;
+ Chardev *chr = CHARDEV(src->scd);
GIOFunc func = (GIOFunc)callback;
+ GIOCondition cond = chr->be_open ? G_IO_OUT : G_IO_HUP;
- return func(NULL, G_IO_OUT, user_data);
+ return func(NULL, cond, user_data);
}
static GSourceFuncs SpiceCharSourceFuncs = {