mirror of
https://github.com/qemu/qemu.git
synced 2024-11-23 19:03:38 +08:00
ui: Always remove an old VNC channel watch before adding a new one
Also set saved handle to zero when removing without adding a new watch. Signed-off-by: Brandon Carpenter <brandon.carpenter@cypherpath.com> Reviewed-by: Paolo Bonzini <pbonzini@redhat.com> Reviewed-by: Daniel P. Berrange <berrange@redhat.com>
This commit is contained in:
parent
33badfd1e3
commit
a75d6f0761
@ -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);
|
||||
|
@ -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);
|
||||
}
|
||||
|
4
ui/vnc.c
4
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) {
|
||||
|
Loading…
Reference in New Issue
Block a user