chiark / gitweb /
prefork-interp: wip
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Tue, 12 Jul 2022 19:07:20 +0000 (20:07 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Sun, 21 Aug 2022 20:21:10 +0000 (21:21 +0100)
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
prefork-interp.c

index cdb7dd3778a541508978d45df868a78f59423b23..f37c8fdcb367f1b39993976109b9874b338a2f68 100644 (file)
  *
  *     setup (script)         runs initialisation parts of the script
  *                            at prefork establishment point:
  *
  *     setup (script)         runs initialisation parts of the script
  *                            at prefork establishment point:
- *                            forks to logger(1)
- *                            forks for server, now becomes like monitor below
- *                            exits
+ *     setup (pm) [1]         opens syslog
+ *                            forks for server
+ *                [2]         exits
  *
  *
- *         server (script)    fd0: null, fd[12]: syslog
- *                            other fds: orig-fd[01], listener,
- *                            other fds: call(server-end)(fake)
- *
- *                            right away, forks one fake-accepted monitor:
- *          f-a monitor       [fd0: null, fd[12]: syslgo]
- *                            other fds: call(server-end)(fake)
- *                            runs as monitor, below
- *         
- *         [server (script)]  fd0: null, fd[12]: syslog
- *                            other fds: listener
- *                            closes fds: orig-fd[01], call(server-end)fake)
+ #        server (pm) [1]     [fd0: null],
+ *                            [fd[12: fd2-from-outer-caller]
+ *                            right away, forks one fa-monitor
+ *                    [2]     closes outer caller fds and call(fake)
+ *        [server (pm)]       fd[012]: null
+ *                            other fds: listener, syslog
  *                            runs in loop accepting and forking,
  *                            runs in loop accepting and forking,
- *                            reaping and limiting children
+ *                            reaping and limiting children (incl fa-monitor)
  *                            reports failures of monitors to syslog
  *                            reports failures of monitors to syslog
+ *                            
+ *         f-a monitor        forks executor
+ *                            closes fd: listener
+ *                            [fd[12: fd2-from-outer-caller]
+ *                            [other fds: call(server-end)(fake), syslog]
+ *                            runs as monitor, below
+ *
  *
  *  [client (C wrapper)]      if client connect succeeds:
  *                            now fd: call(client-end)
  *
  *  [client (C wrapper)]      if client connect succeeds:
  *                            now fd: call(client-end)
@@ -52,8 +53,8 @@
  *
  *        [server (script)]   accepts, forks monitor
  *
  *
  *        [server (script)]   accepts, forks monitor
  *
- *          monitor           [fd0: null, fd[12]: syslgo]
- *                            other fds: call(server-end)
+ *          monitor           [fd[012]: null]
+ *                            other fds: syslog, call(server-end)
  *                            sends ack byte
  *                            receives args, env, fds
  *                            forks executor
  *                            sends ack byte
  *                            receives args, env, fds
  *                            forks executor
@@ -67,8 +68,8 @@
  *                            runs main part of script
  *                            exits normally
  *
  *                            runs main part of script
  *                            exits normally
  *
- *          [monitor]         [fd0: null, fd[12]: syslgo]
- *                            [other fds: call(server-end)]
+ *          [monitor]         [fd[012]: null]
+ *                            [other fds: call(server-end), syslog]
  *                            reaps executor
  *                            reports status via socket
  *
  *                            reaps executor
  *                            reports status via socket
  *
@@ -177,8 +178,8 @@ static void become_setup(int sfd, int fake_pair[2])
   if (dup2(null_0, 0)) diee("dup2 /dev/null onto stdin");
   if (dup2(2, 1) != 1) die("dup2 stderr onto stdout");
 
   if (dup2(null_0, 0)) diee("dup2 /dev/null onto stdin");
   if (dup2(2, 1) != 1) die("dup2 stderr onto stdout");
 
-  putenv(asprintf("PREFORK_INTERP_FDS=%d,%d,%d,%d",
-                 sfd, call_fd, fd0_save, fd1_save));
+  putenv(asprintf("PREFORK_INTERP=%d,%d,%d,%d,%s",
+                 sfd, call_fd, fd0_save, fd1_save, socket_path));
   execv(
 }
 
   execv(
 }