|
|
9bac43 |
From 2c959596e23736aadad5010a8db665b99359b517 Mon Sep 17 00:00:00 2001
|
|
|
9bac43 |
From: "Daniel P. Berrange" <berrange@redhat.com>
|
|
|
9bac43 |
Date: Wed, 20 Dec 2017 17:56:46 +0100
|
|
|
9bac43 |
Subject: [PATCH 06/42] ui: Always remove an old VNC channel watch before
|
|
|
9bac43 |
adding a new one
|
|
|
9bac43 |
|
|
|
9bac43 |
RH-Author: Daniel P. Berrange <berrange@redhat.com>
|
|
|
9bac43 |
Message-id: <20171220175702.29663-5-berrange@redhat.com>
|
|
|
9bac43 |
Patchwork-id: 78457
|
|
|
9bac43 |
O-Subject: [RHV-7.5 qemu-kvm-rhev PATCH v2 04/20] ui: Always remove an old VNC channel watch before adding a new one
|
|
|
9bac43 |
Bugzilla: 1518649
|
|
|
9bac43 |
RH-Acked-by: John Snow <jsnow@redhat.com>
|
|
|
9bac43 |
RH-Acked-by: Jeffrey Cody <jcody@redhat.com>
|
|
|
9bac43 |
RH-Acked-by: Miroslav Rezanina <mrezanin@redhat.com>
|
|
|
9bac43 |
|
|
|
9bac43 |
From: Brandon Carpenter <brandon.carpenter@cypherpath.com>
|
|
|
9bac43 |
|
|
|
9bac43 |
Also set saved handle to zero when removing without adding a new watch.
|
|
|
9bac43 |
|
|
|
9bac43 |
Signed-off-by: Brandon Carpenter <brandon.carpenter@cypherpath.com>
|
|
|
9bac43 |
Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>
|
|
|
9bac43 |
Reviewed-by: Daniel P. Berrange <berrange@redhat.com>
|
|
|
9bac43 |
(cherry picked from commit a75d6f07613af7ec5b016b31b117436e32ce7a5f)
|
|
|
9bac43 |
Signed-off-by: Miroslav Rezanina <mrezanin@redhat.com>
|
|
|
9bac43 |
---
|
|
|
9bac43 |
ui/vnc-auth-vencrypt.c | 3 +++
|
|
|
9bac43 |
ui/vnc-ws.c | 6 ++++++
|
|
|
9bac43 |
ui/vnc.c | 4 ++++
|
|
|
9bac43 |
3 files changed, 13 insertions(+)
|
|
|
9bac43 |
|
|
|
9bac43 |
diff --git a/ui/vnc-auth-vencrypt.c b/ui/vnc-auth-vencrypt.c
|
|
|
9bac43 |
index ffaab57..c3eece4 100644
|
|
|
9bac43 |
--- a/ui/vnc-auth-vencrypt.c
|
|
|
9bac43 |
+++ b/ui/vnc-auth-vencrypt.c
|
|
|
9bac43 |
@@ -77,6 +77,9 @@ static void vnc_tls_handshake_done(QIOTask *task,
|
|
|
9bac43 |
vnc_client_error(vs);
|
|
|
9bac43 |
error_free(err);
|
|
|
9bac43 |
} else {
|
|
|
9bac43 |
+ if (vs->ioc_tag) {
|
|
|
9bac43 |
+ g_source_remove(vs->ioc_tag);
|
|
|
9bac43 |
+ }
|
|
|
9bac43 |
vs->ioc_tag = qio_channel_add_watch(
|
|
|
9bac43 |
vs->ioc, G_IO_IN | G_IO_OUT, vnc_client_io, vs, NULL);
|
|
|
9bac43 |
start_auth_vencrypt_subauth(vs);
|
|
|
9bac43 |
diff --git a/ui/vnc-ws.c b/ui/vnc-ws.c
|
|
|
9bac43 |
index f530cd5..eaf3095 100644
|
|
|
9bac43 |
--- a/ui/vnc-ws.c
|
|
|
9bac43 |
+++ b/ui/vnc-ws.c
|
|
|
9bac43 |
@@ -36,6 +36,9 @@ static void vncws_tls_handshake_done(QIOTask *task,
|
|
|
9bac43 |
error_free(err);
|
|
|
9bac43 |
} else {
|
|
|
9bac43 |
VNC_DEBUG("TLS handshake complete, starting websocket handshake\n");
|
|
|
9bac43 |
+ if (vs->ioc_tag) {
|
|
|
9bac43 |
+ g_source_remove(vs->ioc_tag);
|
|
|
9bac43 |
+ }
|
|
|
9bac43 |
vs->ioc_tag = qio_channel_add_watch(
|
|
|
9bac43 |
QIO_CHANNEL(vs->ioc), G_IO_IN, vncws_handshake_io, vs, NULL);
|
|
|
9bac43 |
}
|
|
|
9bac43 |
@@ -97,6 +100,9 @@ static void vncws_handshake_done(QIOTask *task,
|
|
|
9bac43 |
} else {
|
|
|
9bac43 |
VNC_DEBUG("Websock handshake complete, starting VNC protocol\n");
|
|
|
9bac43 |
vnc_start_protocol(vs);
|
|
|
9bac43 |
+ if (vs->ioc_tag) {
|
|
|
9bac43 |
+ g_source_remove(vs->ioc_tag);
|
|
|
9bac43 |
+ }
|
|
|
9bac43 |
vs->ioc_tag = qio_channel_add_watch(
|
|
|
9bac43 |
vs->ioc, G_IO_IN, vnc_client_io, vs, NULL);
|
|
|
9bac43 |
}
|
|
|
9bac43 |
diff --git a/ui/vnc.c b/ui/vnc.c
|
|
|
9bac43 |
index 5b1e264..4e1d94f 100644
|
|
|
9bac43 |
--- a/ui/vnc.c
|
|
|
9bac43 |
+++ b/ui/vnc.c
|
|
|
9bac43 |
@@ -1121,6 +1121,7 @@ static void vnc_disconnect_start(VncState *vs)
|
|
|
9bac43 |
vnc_set_share_mode(vs, VNC_SHARE_MODE_DISCONNECTED);
|
|
|
9bac43 |
if (vs->ioc_tag) {
|
|
|
9bac43 |
g_source_remove(vs->ioc_tag);
|
|
|
9bac43 |
+ vs->ioc_tag = 0;
|
|
|
9bac43 |
}
|
|
|
9bac43 |
qio_channel_close(vs->ioc, NULL);
|
|
|
9bac43 |
vs->disconnecting = TRUE;
|
|
|
9bac43 |
@@ -2931,6 +2932,9 @@ static void vnc_connect(VncDisplay *vd, QIOChannelSocket *sioc,
|
|
|
9bac43 |
VNC_DEBUG("New client on socket %p\n", vs->sioc);
|
|
|
9bac43 |
update_displaychangelistener(&vd->dcl, VNC_REFRESH_INTERVAL_BASE);
|
|
|
9bac43 |
qio_channel_set_blocking(vs->ioc, false, NULL);
|
|
|
9bac43 |
+ if (vs->ioc_tag) {
|
|
|
9bac43 |
+ g_source_remove(vs->ioc_tag);
|
|
|
9bac43 |
+ }
|
|
|
9bac43 |
if (websocket) {
|
|
|
9bac43 |
vs->websocket = 1;
|
|
|
9bac43 |
if (vd->tlscreds) {
|
|
|
9bac43 |
--
|
|
|
9bac43 |
1.8.3.1
|
|
|
9bac43 |
|