summaryrefslogtreecommitdiff
path: root/runit
diff options
context:
space:
mode:
authorDenis Vlasenko <vda.linux@googlemail.com>2008-01-02 19:55:04 +0000
committerDenis Vlasenko <vda.linux@googlemail.com>2008-01-02 19:55:04 +0000
commitfb0eba706cccd510d99c4c5339a76dd15bc8a628 (patch)
tree45122b93a1a5d628e4aa146251e34397094de817 /runit
parent27963980dbe1262fd6c447fc7d06839aea0861bc (diff)
downloadbusybox-w32-fb0eba706cccd510d99c4c5339a76dd15bc8a628.tar.gz
busybox-w32-fb0eba706cccd510d99c4c5339a76dd15bc8a628.tar.bz2
busybox-w32-fb0eba706cccd510d99c4c5339a76dd15bc8a628.zip
libbb: introduce and use safe_waitpid (loops in EINTR)
*: use more approproate (shorter) versions of wait() function old new delta safe_waitpid - 48 +48 wait_any_nohang - 17 +17 send_tree 365 369 +4 processorstop 432 435 +3 text_yank 110 108 -2 make_human_readable_str 202 200 -2 crond_main 1368 1366 -2 handle_sigchld 49 43 -6 reapchild 166 159 -7 custom 260 250 -10 checkscript 191 177 -14 wait_nohang 17 - -17 wait_pid 43 - -43 ------------------------------------------------------------------------------ (add/remove: 2/2 grow/shrink: 2/7 up/down: 72/-103) Total: -31 bytes
Diffstat (limited to 'runit')
-rw-r--r--runit/runsv.c5
-rw-r--r--runit/runsvdir.c2
-rw-r--r--runit/sv.c3
-rw-r--r--runit/svlogd.c4
4 files changed, 6 insertions, 8 deletions
diff --git a/runit/runsv.c b/runit/runsv.c
index 8c5a4d4ea..84f5193f5 100644
--- a/runit/runsv.c
+++ b/runit/runsv.c
@@ -282,8 +282,7 @@ static unsigned custom(struct svdir *s, char c)
282 execve(a, prog, environ); 282 execve(a, prog, environ);
283 fatal_cannot("run control/?"); 283 fatal_cannot("run control/?");
284 } 284 }
285 while (wait_pid(&w, pid) == -1) { 285 while (safe_waitpid(pid, &w, 0) == -1) {
286 if (errno == EINTR) continue;
287 warn_cannot("wait for child control/?"); 286 warn_cannot("wait for child control/?");
288 return 0; 287 return 0;
289 } 288 }
@@ -593,7 +592,7 @@ int runsv_main(int argc, char **argv)
593 int child; 592 int child;
594 int wstat; 593 int wstat;
595 594
596 child = wait_nohang(&wstat); 595 child = wait_any_nohang(&wstat);
597 if (!child) 596 if (!child)
598 break; 597 break;
599 if ((child == -1) && (errno != EINTR)) 598 if ((child == -1) && (errno != EINTR))
diff --git a/runit/runsvdir.c b/runit/runsvdir.c
index 9e98ca6f8..838490376 100644
--- a/runit/runsvdir.c
+++ b/runit/runsvdir.c
@@ -252,7 +252,7 @@ int runsvdir_main(int argc, char **argv)
252 for (;;) { 252 for (;;) {
253 /* collect children */ 253 /* collect children */
254 for (;;) { 254 for (;;) {
255 pid = wait_nohang(&wstat); 255 pid = wait_any_nohang(&wstat);
256 if (pid <= 0) 256 if (pid <= 0)
257 break; 257 break;
258 for (i = 0; i < svnum; i++) { 258 for (i = 0; i < svnum; i++) {
diff --git a/runit/sv.c b/runit/sv.c
index e31adffed..a89e24439 100644
--- a/runit/sv.c
+++ b/runit/sv.c
@@ -333,8 +333,7 @@ static int checkscript(void)
333 bb_perror_msg(WARN"cannot %s child %s/check", "run", *service); 333 bb_perror_msg(WARN"cannot %s child %s/check", "run", *service);
334 return 0; 334 return 0;
335 } 335 }
336 while (wait_pid(&w, pid) == -1) { 336 while (safe_waitpid(pid, &w, 0) == -1) {
337 if (errno == EINTR) continue;
338 bb_perror_msg(WARN"cannot %s child %s/check", "wait for", *service); 337 bb_perror_msg(WARN"cannot %s child %s/check", "wait for", *service);
339 return 0; 338 return 0;
340 } 339 }
diff --git a/runit/svlogd.c b/runit/svlogd.c
index 2dc8cb987..1d679c972 100644
--- a/runit/svlogd.c
+++ b/runit/svlogd.c
@@ -265,7 +265,7 @@ static unsigned processorstop(struct logdir *ld)
265 265
266 if (ld->ppid) { 266 if (ld->ppid) {
267 sig_unblock(SIGHUP); 267 sig_unblock(SIGHUP);
268 while (wait_pid(&wstat, ld->ppid) == -1) 268 while (safe_waitpid(ld->ppid, &wstat, 0) == -1)
269 pause2cannot("wait for processor", ld->name); 269 pause2cannot("wait for processor", ld->name);
270 sig_block(SIGHUP); 270 sig_block(SIGHUP);
271 ld->ppid = 0; 271 ld->ppid = 0;
@@ -794,7 +794,7 @@ static void sig_child_handler(int sig_no)
794 794
795 if (verbose) 795 if (verbose)
796 bb_error_msg(INFO"sig%s received", "child"); 796 bb_error_msg(INFO"sig%s received", "child");
797 while ((pid = wait_nohang(&wstat)) > 0) { 797 while ((pid = wait_any_nohang(&wstat)) > 0) {
798 for (l = 0; l < dirn; ++l) { 798 for (l = 0; l < dirn; ++l) {
799 if (dir[l].ppid == pid) { 799 if (dir[l].ppid == pid) {
800 dir[l].ppid = 0; 800 dir[l].ppid = 0;