[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL v1 04/11] ui: Always remove an old VNC channel watch
From: |
Daniel P. Berrange |
Subject: |
[Qemu-devel] [PULL v1 04/11] ui: Always remove an old VNC channel watch before adding a new one |
Date: |
Wed, 4 Oct 2017 13:25:08 +0100 |
From: Brandon Carpenter <address@hidden>
Also set saved handle to zero when removing without adding a new watch.
Signed-off-by: Brandon Carpenter <address@hidden>
Reviewed-by: Paolo Bonzini <address@hidden>
Reviewed-by: Daniel P. Berrange <address@hidden>
---
ui/vnc-auth-vencrypt.c | 3 +++
ui/vnc-ws.c | 6 ++++++
ui/vnc.c | 4 ++++
3 files changed, 13 insertions(+)
diff --git a/ui/vnc-auth-vencrypt.c b/ui/vnc-auth-vencrypt.c
index f0bec204b3..7833631275 100644
--- a/ui/vnc-auth-vencrypt.c
+++ b/ui/vnc-auth-vencrypt.c
@@ -75,6 +75,9 @@ static void vnc_tls_handshake_done(QIOTask *task,
vnc_client_error(vs);
error_free(err);
} else {
+ if (vs->ioc_tag) {
+ g_source_remove(vs->ioc_tag);
+ }
vs->ioc_tag = qio_channel_add_watch(
vs->ioc, G_IO_IN | G_IO_OUT, vnc_client_io, vs, NULL);
start_auth_vencrypt_subauth(vs);
diff --git a/ui/vnc-ws.c b/ui/vnc-ws.c
index aeaafe2c21..6ccad22cef 100644
--- a/ui/vnc-ws.c
+++ b/ui/vnc-ws.c
@@ -37,6 +37,9 @@ static void vncws_tls_handshake_done(QIOTask *task,
error_free(err);
} else {
VNC_DEBUG("TLS handshake complete, starting websocket handshake\n");
+ if (vs->ioc_tag) {
+ g_source_remove(vs->ioc_tag);
+ }
vs->ioc_tag = qio_channel_add_watch(
QIO_CHANNEL(vs->ioc), G_IO_IN, vncws_handshake_io, vs, NULL);
}
@@ -97,6 +100,9 @@ static void vncws_handshake_done(QIOTask *task,
} else {
VNC_DEBUG("Websock handshake complete, starting VNC protocol\n");
vnc_start_protocol(vs);
+ if (vs->ioc_tag) {
+ g_source_remove(vs->ioc_tag);
+ }
vs->ioc_tag = qio_channel_add_watch(
vs->ioc, G_IO_IN, vnc_client_io, vs, NULL);
}
diff --git a/ui/vnc.c b/ui/vnc.c
index af810f0547..9f8d5a1b1f 100644
--- a/ui/vnc.c
+++ b/ui/vnc.c
@@ -1122,6 +1122,7 @@ static void vnc_disconnect_start(VncState *vs)
vnc_set_share_mode(vs, VNC_SHARE_MODE_DISCONNECTED);
if (vs->ioc_tag) {
g_source_remove(vs->ioc_tag);
+ vs->ioc_tag = 0;
}
qio_channel_close(vs->ioc, NULL);
vs->disconnecting = TRUE;
@@ -2934,6 +2935,9 @@ static void vnc_connect(VncDisplay *vd, QIOChannelSocket
*sioc,
VNC_DEBUG("New client on socket %p\n", vs->sioc);
update_displaychangelistener(&vd->dcl, VNC_REFRESH_INTERVAL_BASE);
qio_channel_set_blocking(vs->ioc, false, NULL);
+ if (vs->ioc_tag) {
+ g_source_remove(vs->ioc_tag);
+ }
if (websocket) {
vs->websocket = 1;
if (vd->tlscreds) {
--
2.13.5
- [Qemu-devel] [PULL v1 00/11] Merge qio 2017/10/04, Daniel P. Berrange, 2017/10/04
- [Qemu-devel] [PULL v1 02/11] io: include full error message in websocket handshake trace, Daniel P. Berrange, 2017/10/04
- [Qemu-devel] [PULL v1 03/11] io: use case insensitive check for Connection & Upgrade websock headers, Daniel P. Berrange, 2017/10/04
- [Qemu-devel] [PULL v1 04/11] ui: Always remove an old VNC channel watch before adding a new one,
Daniel P. Berrange <=
- [Qemu-devel] [PULL v1 01/11] io: send proper HTTP response for websocket errors, Daniel P. Berrange, 2017/10/04
- [Qemu-devel] [PULL v1 05/11] io: Small updates in preparation for websocket changes, Daniel P. Berrange, 2017/10/04
- [Qemu-devel] [PULL v1 08/11] io: Ignore websocket PING and PONG frames, Daniel P. Berrange, 2017/10/04
- [Qemu-devel] [PULL v1 06/11] io: Add support for fragmented websocket binary frames, Daniel P. Berrange, 2017/10/04
- [Qemu-devel] [PULL v1 07/11] io: Allow empty websocket payload, Daniel P. Berrange, 2017/10/04
- [Qemu-devel] [PULL v1 09/11] io: Reply to ping frames, Daniel P. Berrange, 2017/10/04
- [Qemu-devel] [PULL v1 10/11] io: Attempt to send websocket close messages to client, Daniel P. Berrange, 2017/10/04
- [Qemu-devel] [PULL v1 11/11] io: add trace events for websockets frame handling, Daniel P. Berrange, 2017/10/04
- Re: [Qemu-devel] [PULL v1 00/11] Merge qio 2017/10/04, Peter Maydell, 2017/10/05