From 8283fc7b84e456760172f042bafc5827b6fcf29e Mon Sep 17 00:00:00 2001 From: Robert Ancell Date: Wed, 6 Dec 2017 17:09:28 +1300 Subject: Fix VNC connection not being closed on session exit --- src/vnc-server.c | 2 +- tests/scripts/vnc-command.conf | 1 + tests/scripts/vnc-dimensions.conf | 1 + tests/scripts/vnc-guest.conf | 1 + tests/scripts/vnc-login.conf | 11 +++++++++-- tests/scripts/vnc-open-file-descriptors.conf | 1 + tests/src/vnc-client.c | 17 ++++++++++++++++- 7 files changed, 30 insertions(+), 4 deletions(-) diff --git a/src/vnc-server.c b/src/vnc-server.c index 1b29f93b..a1515e82 100644 --- a/src/vnc-server.c +++ b/src/vnc-server.c @@ -72,7 +72,7 @@ vnc_server_get_listen_address (VNCServer *server) static gboolean read_cb (GSocket *socket, GIOCondition condition, VNCServer *server) { - GSocket *client_socket; + g_autoptr(GSocket) client_socket = NULL; g_autoptr(GError) error = NULL; client_socket = g_socket_accept (socket, NULL, &error); diff --git a/tests/scripts/vnc-command.conf b/tests/scripts/vnc-command.conf index fc2bbcb6..0f1e25fd 100644 --- a/tests/scripts/vnc-command.conf +++ b/tests/scripts/vnc-command.conf @@ -43,4 +43,5 @@ command=Xvnc -option #?*STOP-DAEMON #?GREETER-X-0 TERMINATE SIGNAL=15 #?XVNC-0 TERMINATE SIGNAL=15 +#?VNC-CLIENT DISCONNECTED #?RUNNER DAEMON-EXIT STATUS=0 diff --git a/tests/scripts/vnc-dimensions.conf b/tests/scripts/vnc-dimensions.conf index 0e835138..7b51bd36 100644 --- a/tests/scripts/vnc-dimensions.conf +++ b/tests/scripts/vnc-dimensions.conf @@ -45,4 +45,5 @@ depth=16 #?*STOP-DAEMON #?GREETER-X-0 TERMINATE SIGNAL=15 #?XVNC-0 TERMINATE SIGNAL=15 +#?VNC-CLIENT DISCONNECTED #?RUNNER DAEMON-EXIT STATUS=0 diff --git a/tests/scripts/vnc-guest.conf b/tests/scripts/vnc-guest.conf index 2d394f12..431bb244 100644 --- a/tests/scripts/vnc-guest.conf +++ b/tests/scripts/vnc-guest.conf @@ -63,4 +63,5 @@ user-session=default #?SESSION-X-0 TERMINATE SIGNAL=15 #?XVNC-0 TERMINATE SIGNAL=15 #?GUEST-ACCOUNT REMOVE USERNAME=guest-.* +#?VNC-CLIENT DISCONNECTED #?RUNNER DAEMON-EXIT STATUS=0 diff --git a/tests/scripts/vnc-login.conf b/tests/scripts/vnc-login.conf index 2ba177dc..cdfe17b8 100644 --- a/tests/scripts/vnc-login.conf +++ b/tests/scripts/vnc-login.conf @@ -57,8 +57,15 @@ user-session=default #?XVNC-0 ACCEPT-CONNECT #?SESSION-X-0 CONNECT-XSERVER +# Logout session +#?*SESSION-X-0 LOGOUT + +# X server stops +#?XVNC-0 TERMINATE SIGNAL=15 + +# VNC connection ends +#?VNC-CLIENT DISCONNECTED + # Clean up #?*STOP-DAEMON -#?SESSION-X-0 TERMINATE SIGNAL=15 -#?XVNC-0 TERMINATE SIGNAL=15 #?RUNNER DAEMON-EXIT STATUS=0 diff --git a/tests/scripts/vnc-open-file-descriptors.conf b/tests/scripts/vnc-open-file-descriptors.conf index 323fa39f..753c84dd 100644 --- a/tests/scripts/vnc-open-file-descriptors.conf +++ b/tests/scripts/vnc-open-file-descriptors.conf @@ -64,4 +64,5 @@ user-session=default #?*STOP-DAEMON #?SESSION-X-0 TERMINATE SIGNAL=15 #?XVNC-0 TERMINATE SIGNAL=15 +#?VNC-CLIENT DISCONNECTED #?RUNNER DAEMON-EXIT STATUS=0 diff --git a/tests/src/vnc-client.c b/tests/src/vnc-client.c index be94315b..7a49b9ad 100644 --- a/tests/src/vnc-client.c +++ b/tests/src/vnc-client.c @@ -67,5 +67,20 @@ main (int argc, char **argv) return EXIT_FAILURE; } - return EXIT_SUCCESS; + while (TRUE) + { + n_read = g_socket_receive (socket, buffer, 1023, NULL, &error); + if (n_read < 0) + { + g_warning ("Unable to receive on VNC socket: %s", error->message); + return EXIT_FAILURE; + } + + if (n_read == 0) + { + status_notify ("VNC-CLIENT DISCONNECTED"); + return EXIT_SUCCESS; + } + } + } -- cgit v1.2.1