aboutsummaryrefslogtreecommitdiff
path: root/networking
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 /networking
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 'networking')
-rw-r--r--networking/httpd.c2
-rw-r--r--networking/ifupdown.c4
-rw-r--r--networking/inetd.c2
-rw-r--r--networking/telnetd.c2
-rw-r--r--networking/udhcp/script.c2
5 files changed, 6 insertions, 6 deletions
diff --git a/networking/httpd.c b/networking/httpd.c
index 87dc4b7da..72949755a 100644
--- a/networking/httpd.c
+++ b/networking/httpd.c
@@ -1152,7 +1152,7 @@ static NOINLINE void cgi_io_loop_and_exit(int fromCgi_rd, int toCgi_wr, int post
1152 count = safe_poll(pfd, 3, -1); 1152 count = safe_poll(pfd, 3, -1);
1153 if (count <= 0) { 1153 if (count <= 0) {
1154#if 0 1154#if 0
1155 if (waitpid(pid, &status, WNOHANG) <= 0) { 1155 if (safe_waitpid(pid, &status, WNOHANG) <= 0) {
1156 /* Weird. CGI didn't exit and no fd's 1156 /* Weird. CGI didn't exit and no fd's
1157 * are ready, yet poll returned?! */ 1157 * are ready, yet poll returned?! */
1158 continue; 1158 continue;
diff --git a/networking/ifupdown.c b/networking/ifupdown.c
index 31911cd21..68ea01a67 100644
--- a/networking/ifupdown.c
+++ b/networking/ifupdown.c
@@ -944,7 +944,7 @@ static int doit(char *str)
944 execle(DEFAULT_SHELL, DEFAULT_SHELL, "-c", str, NULL, my_environ); 944 execle(DEFAULT_SHELL, DEFAULT_SHELL, "-c", str, NULL, my_environ);
945 exit(127); 945 exit(127);
946 } 946 }
947 waitpid(child, &status, 0); 947 safe_waitpid(child, &status, 0);
948 if (!WIFEXITED(status) || WEXITSTATUS(status) != 0) { 948 if (!WIFEXITED(status) || WEXITSTATUS(status) != 0) {
949 return 0; 949 return 0;
950 } 950 }
@@ -1068,7 +1068,7 @@ static char *run_mapping(char *physical, struct mapping_defn_t * map)
1068 fprintf(in, "%s\n", map->mapping[i]); 1068 fprintf(in, "%s\n", map->mapping[i]);
1069 } 1069 }
1070 fclose(in); 1070 fclose(in);
1071 waitpid(pid, &status, 0); 1071 safe_waitpid(pid, &status, 0);
1072 1072
1073 if (WIFEXITED(status) && WEXITSTATUS(status) == 0) { 1073 if (WIFEXITED(status) && WEXITSTATUS(status) == 0) {
1074 /* If the mapping script exited successfully, try to 1074 /* If the mapping script exited successfully, try to
diff --git a/networking/inetd.c b/networking/inetd.c
index a9c9397f5..d643dc6e0 100644
--- a/networking/inetd.c
+++ b/networking/inetd.c
@@ -1161,7 +1161,7 @@ static void reapchild(int sig ATTRIBUTE_UNUSED)
1161 servtab_t *sep; 1161 servtab_t *sep;
1162 1162
1163 for (;;) { 1163 for (;;) {
1164 pid = wait3(&status, WNOHANG, NULL); 1164 pid = wait_any_nohang(&status);
1165 if (pid <= 0) 1165 if (pid <= 0)
1166 break; 1166 break;
1167 for (sep = servtab; sep; sep = sep->se_next) 1167 for (sep = servtab; sep; sep = sep->se_next)
diff --git a/networking/telnetd.c b/networking/telnetd.c
index 108bbf44f..0201d2636 100644
--- a/networking/telnetd.c
+++ b/networking/telnetd.c
@@ -394,7 +394,7 @@ static void handle_sigchld(int sig)
394 394
395 /* Looping: more than one child may have exited */ 395 /* Looping: more than one child may have exited */
396 while (1) { 396 while (1) {
397 pid = waitpid(-1, NULL, WNOHANG); 397 pid = wait_any_nohang(NULL);
398 if (pid <= 0) 398 if (pid <= 0)
399 break; 399 break;
400 ts = sessions; 400 ts = sessions;
diff --git a/networking/udhcp/script.c b/networking/udhcp/script.c
index 8a188988e..71f033328 100644
--- a/networking/udhcp/script.c
+++ b/networking/udhcp/script.c
@@ -232,7 +232,7 @@ void udhcp_run_script(struct dhcpMessage *packet, const char *name)
232 name, NULL, envp); 232 name, NULL, envp);
233 bb_perror_msg_and_die("script %s failed", client_config.script); 233 bb_perror_msg_and_die("script %s failed", client_config.script);
234 } 234 }
235 waitpid(pid, NULL, 0); 235 safe_waitpid(pid, NULL, 0);
236 for (curr = envp; *curr; curr++) 236 for (curr = envp; *curr; curr++)
237 free(*curr); 237 free(*curr);
238 free(envp); 238 free(envp);