]> source.dussan.org Git - tigervnc.git/commitdiff
vncserver: Display check should check for lock file first
authorMark Mielke <mark.mielke@gmail.com>
Wed, 29 Jul 2020 03:46:02 +0000 (23:46 -0400)
committerMark Mielke <mark.mielke@gmail.com>
Wed, 29 Jul 2020 04:30:48 +0000 (00:30 -0400)
Checking for the existence of `/tmp/.X<n>-lock` is a fast read-only
operation, while calls to bind() or connect() are more expensive and
may have side effects. Perform the fast operation first.

unix/vncserver/vncserver.in

index 2707bace83e1d99d32e06a3fdc719724d174800f..27288fd28fab961acb9d275ab101f94e1886557b 100755 (executable)
@@ -363,6 +363,12 @@ sub CheckDisplayNumber
 {
     local ($n) = @_;
 
+    if (-e "/tmp/.X$n-lock") {
+       warn "\nWarning: $host:$n is taken because of /tmp/.X$n-lock\n";
+       warn "Remove this file if there is no X server $host:$n\n";
+       return 0;
+    }
+
     socket(S, $AF_INET, $SOCK_STREAM, 0) || die "$prog: socket failed: $!\n";
     eval 'setsockopt(S, &SOL_SOCKET, &SO_REUSEADDR, pack("l", 1))';
     if (!bind(S, pack('S n x12', $AF_INET, 6000 + $n))) {
@@ -379,12 +385,6 @@ sub CheckDisplayNumber
     }
     close(S);
 
-    if (-e "/tmp/.X$n-lock") {
-       warn "\nWarning: $host:$n is taken because of /tmp/.X$n-lock\n";
-       warn "Remove this file if there is no X server $host:$n\n";
-       return 0;
-    }
-
     if (-e "/tmp/.X11-unix/X$n") {
        warn "\nWarning: $host:$n is taken because of /tmp/.X11-unix/X$n\n";
        warn "Remove this file if there is no X server $host:$n\n";