diff options
author | vda <vda@69ca8d6d-28ef-0310-b511-8ec308f3f277> | 2007-05-06 01:37:21 +0000 |
---|---|---|
committer | vda <vda@69ca8d6d-28ef-0310-b511-8ec308f3f277> | 2007-05-06 01:37:21 +0000 |
commit | a28bd4d7ca3e09a560e6481922451611f7a4c6cb (patch) | |
tree | 78e99e0f85514518696299327d059e7e7eb7a465 /runit | |
parent | 3691f48bd0cac31f909e27fe17ed40eeac853045 (diff) | |
download | busybox-w32-a28bd4d7ca3e09a560e6481922451611f7a4c6cb.tar.gz busybox-w32-a28bd4d7ca3e09a560e6481922451611f7a4c6cb.tar.bz2 busybox-w32-a28bd4d7ca3e09a560e6481922451611f7a4c6cb.zip |
svlogd: fix 'SEGV on uninitialized data' and make it honor TERM
git-svn-id: svn://busybox.net/trunk/busybox@18562 69ca8d6d-28ef-0310-b511-8ec308f3f277
Diffstat (limited to 'runit')
-rw-r--r-- | runit/svlogd.c | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/runit/svlogd.c b/runit/svlogd.c index c2cff9679..4e9644fd5 100644 --- a/runit/svlogd.c +++ b/runit/svlogd.c | |||
@@ -642,9 +642,11 @@ static int buffer_pread(int fd, char *s, unsigned len, struct taia *now) | |||
642 | trotate = dir[i].trotate; | 642 | trotate = dir[i].trotate; |
643 | } | 643 | } |
644 | 644 | ||
645 | while (1) { | 645 | do { |
646 | sigprocmask(SIG_UNBLOCK, blocked_sigset, NULL); | 646 | sigprocmask(SIG_UNBLOCK, blocked_sigset, NULL); |
647 | iopause(&input, 1, &trotate, now); | 647 | iopause(&input, 1, &trotate, now); |
648 | // TODO: do not unblock/block, but use sigpending after iopause | ||
649 | // to see whether there was any sig? (one syscall less...) | ||
648 | sigprocmask(SIG_BLOCK, blocked_sigset, NULL); | 650 | sigprocmask(SIG_BLOCK, blocked_sigset, NULL); |
649 | i = ndelay_read(fd, s, len); | 651 | i = ndelay_read(fd, s, len); |
650 | if (i >= 0) break; | 652 | if (i >= 0) break; |
@@ -653,7 +655,7 @@ static int buffer_pread(int fd, char *s, unsigned len, struct taia *now) | |||
653 | break; | 655 | break; |
654 | } | 656 | } |
655 | /* else: EAGAIN - normal, repeat silently */ | 657 | /* else: EAGAIN - normal, repeat silently */ |
656 | } | 658 | } while (!exitasap); |
657 | 659 | ||
658 | if (i > 0) { | 660 | if (i > 0) { |
659 | int cnt; | 661 | int cnt; |
@@ -784,12 +786,12 @@ int svlogd_main(int argc, char **argv) | |||
784 | ////if (buflen <= linemax) usage(); | 786 | ////if (buflen <= linemax) usage(); |
785 | fdwdir = xopen(".", O_RDONLY|O_NDELAY); | 787 | fdwdir = xopen(".", O_RDONLY|O_NDELAY); |
786 | coe(fdwdir); | 788 | coe(fdwdir); |
787 | dir = xmalloc(dirn * sizeof(struct logdir)); | 789 | dir = xzalloc(dirn * sizeof(struct logdir)); |
788 | for (i = 0; i < dirn; ++i) { | 790 | for (i = 0; i < dirn; ++i) { |
789 | dir[i].fddir = -1; | 791 | dir[i].fddir = -1; |
790 | dir[i].fdcur = -1; | 792 | dir[i].fdcur = -1; |
791 | ////dir[i].btmp = xmalloc(buflen); | 793 | ////dir[i].btmp = xmalloc(buflen); |
792 | dir[i].ppid = 0; | 794 | /*dir[i].ppid = 0;*/ |
793 | } | 795 | } |
794 | /* line = xmalloc(linemax + (timestamp ? 26 : 0)); */ | 796 | /* line = xmalloc(linemax + (timestamp ? 26 : 0)); */ |
795 | fndir = argv; | 797 | fndir = argv; |