From c8d42fbabed90f2d416500821b880a733e366705 Mon Sep 17 00:00:00 2001
From: Michael Stapelberg <michael@stapelberg.de>
Date: Tue, 4 Oct 2011 23:31:06 +0100
Subject: [PATCH] tests: SocketActivation: only close() and dup2() if
 fileno(socket) != 3

---
 testcases/lib/SocketActivation.pm | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/testcases/lib/SocketActivation.pm b/testcases/lib/SocketActivation.pm
index 92e514d5..70bbec05 100644
--- a/testcases/lib/SocketActivation.pm
+++ b/testcases/lib/SocketActivation.pm
@@ -56,8 +56,12 @@ sub activate_i3 {
         $ENV{DISPLAY} = $args{display};
         $^F = 3;
 
-        POSIX::close(3);
-        POSIX::dup2(fileno($socket), 3);
+        # If the socket does not use file descriptor 3 by chance already, we
+        # close fd 3 and dup2() the socket to 3.
+        if (fileno($socket) != 3) {
+            POSIX::close(3);
+            POSIX::dup2(fileno($socket), 3);
+        }
 
         # now execute i3
         my $i3cmd = abs_path("../i3") . " -V -d all --disable-signalhandler";