io: fix handling of EOF / error conditions in websock GSource
We were never reporting the G_IO_HUP event when an end of file was hit on the websocket channel. We also didn't report G_IO_ERR when we hit a fatal error processing the websocket protocol. The latter in particular meant that the chardev code would not notice when an eof/error was encountered on the websocket channel, unless the guest OS happened to trigger a write operation. This meant that once the first client had quit, the chardev would never listen to accept a new client. Fixes launchpad bug 1816819 Acked-by: Stefano Garzarella <sgarzare@redhat.com> Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
This commit is contained in:
parent
62a172e6a7
commit
dd154c4d9f
@ -1225,12 +1225,18 @@ qio_channel_websock_source_check(GSource *source)
|
||||
QIOChannelWebsockSource *wsource = (QIOChannelWebsockSource *)source;
|
||||
GIOCondition cond = 0;
|
||||
|
||||
if (wsource->wioc->rawinput.offset || wsource->wioc->io_eof) {
|
||||
if (wsource->wioc->rawinput.offset) {
|
||||
cond |= G_IO_IN;
|
||||
}
|
||||
if (wsource->wioc->encoutput.offset < QIO_CHANNEL_WEBSOCK_MAX_BUFFER) {
|
||||
cond |= G_IO_OUT;
|
||||
}
|
||||
if (wsource->wioc->io_eof) {
|
||||
cond |= G_IO_HUP;
|
||||
}
|
||||
if (wsource->wioc->io_err) {
|
||||
cond |= G_IO_ERR;
|
||||
}
|
||||
|
||||
return cond & wsource->condition;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user