diff options
author | Denis Vlasenko <vda.linux@googlemail.com> | 2008-03-17 12:13:22 +0300 |
---|---|---|
committer | Denis Vlasenko <vda.linux@googlemail.com> | 2008-03-17 12:13:22 +0300 |
commit | 4ee7cd4f6f9f85871c8814bb524d3e691a2992a9 (patch) | |
tree | c1ca93c475e72736cfee70eaaa631f499da3b7e0 /runit/svlogd.c | |
parent | aa9b1828b91bc4b60f1164b7929a6a0ac091419e (diff) |
*: mode tcp/udpsvd to networking, delete ipsvd/*
*/Config.in: fixes to text
svlogd: make it NOMMU capable
function old new delta
processorstart 378 420 +42
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 1/0 up/down: 42/0) Total: 42 bytes
text data bss dec hex filename
797153 662 7420 805235 c4973 busybox_old
797196 662 7420 805278 c499e busybox_unstripped
Diffstat (limited to 'runit/svlogd.c')
-rw-r--r-- | runit/svlogd.c | 19 |
1 files changed, 12 insertions, 7 deletions
diff --git a/runit/svlogd.c b/runit/svlogd.c index 4458bd787..db3d4c540 100644 --- a/runit/svlogd.c +++ b/runit/svlogd.c @@ -206,17 +206,22 @@ static void fmt_time_bernstein_25(char *s) bin2hex(s, (char*)pack, 12); } -static unsigned processorstart(struct logdir *ld) +static void processorstart(struct logdir *ld) { + char sv_ch; int pid; - if (!ld->processor) return 0; + if (!ld->processor) return; if (ld->ppid) { warnx("processor already running", ld->name); - return 0; + return; } - while ((pid = fork()) == -1) - pause2cannot("fork for processor", ld->name); + + /* vfork'ed child trashes this byte, save... */ + sv_ch = ld->fnsave[26]; + + while ((pid = vfork()) == -1) + pause2cannot("vfork for processor", ld->name); if (!pid) { char *prog[4]; int fd; @@ -235,7 +240,7 @@ static unsigned processorstart(struct logdir *ld) bb_error_msg(INFO"processing: %s/%s", ld->name, ld->fnsave); fd = xopen(ld->fnsave, O_RDONLY|O_NDELAY); xmove_fd(fd, 0); - ld->fnsave[26] = 't'; + ld->fnsave[26] = 't'; /* <- that's why we need sv_ch! */ fd = xopen(ld->fnsave, O_WRONLY|O_NDELAY|O_TRUNC|O_CREAT); xmove_fd(fd, 1); fd = open_read("state"); @@ -257,8 +262,8 @@ static unsigned processorstart(struct logdir *ld) execv("/bin/sh", prog); bb_perror_msg_and_die(FATAL"cannot %s processor %s", "run", ld->name); } + ld->fnsave[26] = sv_ch; /* ...restore */ ld->ppid = pid; - return 1; } static unsigned processorstop(struct logdir *ld) |