X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ian/git?a=blobdiff_plain;f=cprogs%2Fprefork-interp.c;h=429790ae3cb0fd238c5cd9e83532b857f7088909;hb=423fdb18ee1fe242157c0fc866e376629e9493e4;hp=6c9a1ff5343451d1600ffedc034fcd034acaf10c;hpb=c634685ea51e5e405380f8975e2b9bf5869e4989;p=chiark-utils.git diff --git a/cprogs/prefork-interp.c b/cprogs/prefork-interp.c index 6c9a1ff..429790a 100644 --- a/cprogs/prefork-interp.c +++ b/cprogs/prefork-interp.c @@ -21,15 +21,25 @@ * === acquire lock === * makes new listening socket * makes first-instance socketpair + * makes watcher pipes + * forks watcher and awaits * forks setup (script, sock fds indicated in env) * fd0, fd1, fd2: from-outer * other fd: call(client-end)(fake) * reaps setup (and reports error) * (implicitly releases lock) * + * watcher fd[012]: watcher pipes + * starts watch on socket path + * sets stderr to line buffered + * sets stdin to nonblocking + * daemonises + * when socket stat changes, quit + * * setup (pre-exec) fd0: null, * fd[12]: fd2-from-outer - * env fds: listener, call(server-end)(fake) + * env fds: listener, call(server-end)(fake), + * watcher read, watcher write * close fd: lockfile * possibly clean env, argv *