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-11 14:04:47 +1300
commitb8e9a4720f3fe401d1f7d1a533f3cc722f5e4ec7 (patch)
treebb19525941b122a682058db25524408825f73805
parent321b3ce87b9fc0e72b472bf96c4fc75fd9f35fc8 (diff)
downloadlightdm-git-b8e9a4720f3fe401d1f7d1a533f3cc722f5e4ec7.tar.gz
Fix VNC connection not being closed on session exit
-rw-r--r--src/vnc-server.c1
-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, 3 deletions
diff --git a/src/vnc-server.c b/src/vnc-server.c
index 914a5ebd..f25bdbba 100644
--- a/src/vnc-server.c
+++ b/src/vnc-server.c
@@ -91,6 +91,7 @@ read_cb (GSocket *socket, GIOCondition condition, VNCServer *server)
g_free (hostname);
g_signal_emit (server, signals[NEW_CONNECTION], 0, client_socket);
+ g_object_unref (client_socket);
}
return TRUE;
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 f70cd568..b8730dcd 100644
--- a/tests/src/vnc-client.c
+++ b/tests/src/vnc-client.c
@@ -68,5 +68,20 @@ main (int argc, char **argv)
if (n_sent != strlen (buffer))
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;
+ }
+ }
+
}