summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Ancell <robert.ancell@canonical.com>2017-12-06 17:09:28 +1300
committerRobert Ancell <robert.ancell@canonical.com>2017-12-08 14:55:34 +1300
commit8283fc7b84e456760172f042bafc5827b6fcf29e (patch)
treed039236ef4b37dc6c591a3ecb74b3c7cae0c6b36
parenta28a3dfe70edce309eaac9a68dab1cc04826f502 (diff)
downloadlightdm-git-8283fc7b84e456760172f042bafc5827b6fcf29e.tar.gz
Fix VNC connection not being closed on session exit
-rw-r--r--src/vnc-server.c2
-rw-r--r--tests/scripts/vnc-command.conf1
-rw-r--r--tests/scripts/vnc-dimensions.conf1
-rw-r--r--tests/scripts/vnc-guest.conf1
-rw-r--r--tests/scripts/vnc-login.conf11
-rw-r--r--tests/scripts/vnc-open-file-descriptors.conf1
-rw-r--r--tests/src/vnc-client.c17
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;
+ }
+ }
+
}