summaryrefslogtreecommitdiff
path: root/runit
diff options
context:
space:
mode:
authorDenis Vlasenko <vda.linux@googlemail.com>2007-05-06 01:37:21 +0000
committerDenis Vlasenko <vda.linux@googlemail.com>2007-05-06 01:37:21 +0000
commitb952835efe865a8303f69d7fdac75c7dc11265ce (patch)
tree78e99e0f85514518696299327d059e7e7eb7a465 /runit
parentdd4cb2b31eabe5c69144dfb20fd08ebc625175b1 (diff)
downloadbusybox-w32-b952835efe865a8303f69d7fdac75c7dc11265ce.tar.gz
busybox-w32-b952835efe865a8303f69d7fdac75c7dc11265ce.tar.bz2
busybox-w32-b952835efe865a8303f69d7fdac75c7dc11265ce.zip
svlogd: fix 'SEGV on uninitialized data' and make it honor TERM
Diffstat (limited to 'runit')
-rw-r--r--runit/svlogd.c10
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;