]> git.sur5r.net Git - i3/i3/commitdiff
clarify comments about socket activation (Thanks mxf)
authorMichael Stapelberg <michael@stapelberg.de>
Wed, 16 Nov 2011 23:14:57 +0000 (23:14 +0000)
committerMichael Stapelberg <michael@stapelberg.de>
Wed, 16 Nov 2011 23:14:57 +0000 (23:14 +0000)
src/main.c
testcases/lib/SocketActivation.pm

index 062a48626d8765d1a99bd803847fe952b8fa424f..7a7c20ac437d3415392d93d61ad2b30076307846 100644 (file)
@@ -615,7 +615,9 @@ int main(int argc, char *argv[]) {
         ev_io_start(main_loop, ipc_io);
     }
 
-    /* Also handle the UNIX domain sockets passed via socket activation */
+    /* Also handle the UNIX domain sockets passed via socket activation. The
+     * parameter 1 means "remove the environment variables", we don’t want to
+     * pass these to child processes. */
     int fds = sd_listen_fds(1);
     if (fds < 0)
         ELOG("socket activation: Error in sd_listen_fds\n");
index f6872fb6161a2f4921aecbcb0cf0cfe09b840f04..36560a8d5113471f0b33f1a5d051fc69bd6f4af2 100644 (file)
@@ -63,8 +63,11 @@ sub activate_i3 {
 
         # We are about to exec, but we did not modify $^F to include $socket
         # when creating the socket (because the file descriptor could have a
-        # number != 3 which would lead to i3 leaking a file descriptor).
-        # Therefore, we explicitly have to clear the file descriptor flags now:
+        # number != 3 which would lead to i3 leaking a file descriptor). This
+        # caused Perl to set the FD_CLOEXEC flag, which would close $socket on
+        # exec(), effectively *NOT* passing $socket to the new process.
+        # Therefore, we explicitly clear FD_CLOEXEC (the only flag right now)
+        # by setting the flags to 0.
         POSIX::fcntl($socket, F_SETFD, 0) or die "Could not clear fd flags: $!";
 
         # If the socket does not use file descriptor 3 by chance already, we