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:36:49 +1300
commit9e8049baff1144a5b23e04096625c999630afa63 (patch)
treefc106cb1a94572d41839d96850d7d3009ea76026
parentcb463b8fb02ed9fa24aabd7baade10498e7c9acb (diff)
downloadlightdm-git-9e8049baff1144a5b23e04096625c999630afa63.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 ff84987a..bc7d39c7 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 3a974b10..9c7d5acc 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
#?XSERVER-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 8acfff16..ed5f4b9c 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
#?XSERVER-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 e9eb1cd2..5b10f6d6 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
#?XSERVER-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 007d03fc..b99d4c57 100644
--- a/tests/scripts/vnc-login.conf
+++ b/tests/scripts/vnc-login.conf
@@ -57,8 +57,15 @@ user-session=default
#?XSERVER-0 ACCEPT-CONNECT
#?SESSION-X-0 CONNECT-XSERVER
+# Logout session
+#?*SESSION-X-0 LOGOUT
+
+# X server stops
+#?XSERVER-0 TERMINATE SIGNAL=15
+
+# VNC connection ends
+#?VNC-CLIENT DISCONNECTED
+
# Clean up
#?*STOP-DAEMON
-#?SESSION-X-0 TERMINATE SIGNAL=15
-#?XSERVER-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 a1fecad4..e43f2545 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
#?XSERVER-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;
+ }
+ }
+
}