From 7d22fab75b8c9940c9abbabe9c48f7e16f522e2d Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Tue, 12 Jul 2022 20:07:20 +0100 Subject: [PATCH] prefork-interp: wip Signed-off-by: Ian Jackson --- prefork-interp.c | 45 +++++++++++++++++++++++---------------------- 1 file changed, 23 insertions(+), 22 deletions(-) diff --git a/prefork-interp.c b/prefork-interp.c index cdb7dd3..f37c8fd 100644 --- a/prefork-interp.c +++ b/prefork-interp.c @@ -25,25 +25,26 @@ * * 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, - * reaping and limiting children + * reaping and limiting children (incl fa-monitor) * 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) @@ -52,8 +53,8 @@ * * [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 @@ -67,8 +68,8 @@ * 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 * @@ -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"); - 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( } -- 2.30.2