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>
This commit is contained in:
Marc-André Lureau 2019-02-21 12:06:53 +01:00 committed by Gerd Hoffmann
parent ac38378950
commit 805189ab14
1 changed files with 14 additions and 1 deletions

View File

@ -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 = {