aboutsummaryrefslogtreecommitdiff
path: root/networking
diff options
context:
space:
mode:
authorDenis Vlasenko <vda.linux@googlemail.com>2007-09-27 10:09:59 +0000
committerDenis Vlasenko <vda.linux@googlemail.com>2007-09-27 10:09:59 +0000
commit5d61e71c3a8ac3296afbfe9a014c62050c5a9234 (patch)
treee9ab2cd35d1f2d51b26a678551a0439b1719928b /networking
parentc9dc2ac578278e86be248cc21e53081f7054da83 (diff)
downloadbusybox-w32-5d61e71c3a8ac3296afbfe9a014c62050c5a9234.tar.gz
busybox-w32-5d61e71c3a8ac3296afbfe9a014c62050c5a9234.tar.bz2
busybox-w32-5d61e71c3a8ac3296afbfe9a014c62050c5a9234.zip
introduce safe_poll (fixes a problem in top)
function old new delta safe_poll - 77 +77 svlogd_main 1470 1466 -4 zcip_main 1530 1524 -6 forkexec 1345 1338 -7 decode_format_string 795 788 -7 collect_blk 474 467 -7 buffer_pread 540 532 -8 tftp 1182 1172 -10 microcom_main 763 749 -14 arpping 441 424 -17 ------------------------------------------------------------------------------ (add/remove: 1/0 grow/shrink: 0/9 up/down: 77/-80) Total: -3 bytes text data bss dec hex filename 770162 1034 10404 781600 bed20 busybox_old 770158 1034 10404 781596 bed1c busybox_unstripped
Diffstat (limited to 'networking')
-rw-r--r--networking/httpd.c6
-rw-r--r--networking/tftp.c4
-rw-r--r--networking/traceroute.c2
-rw-r--r--networking/udhcp/arpping.c7
-rw-r--r--networking/zcip.c14
5 files changed, 14 insertions, 19 deletions
diff --git a/networking/httpd.c b/networking/httpd.c
index cedec800f..92a07107d 100644
--- a/networking/httpd.c
+++ b/networking/httpd.c
@@ -1073,13 +1073,9 @@ static NOINLINE void cgi_io_loop_and_exit(int fromCgi_rd, int toCgi_wr, int post
1073 } 1073 }
1074 1074
1075 /* Now wait on the set of sockets */ 1075 /* Now wait on the set of sockets */
1076 count = poll(pfd, 3, -1); 1076 count = safe_poll(pfd, 3, -1);
1077 if (count <= 0) { 1077 if (count <= 0) {
1078#if 0 1078#if 0
1079 if (errno == EINTR)
1080 continue;
1081#endif
1082#if 0
1083 if (waitpid(pid, &status, WNOHANG) <= 0) { 1079 if (waitpid(pid, &status, WNOHANG) <= 0) {
1084 /* Weird. CGI didn't exit and no fd's 1080 /* Weird. CGI didn't exit and no fd's
1085 * are ready, yet poll returned?! */ 1081 * are ready, yet poll returned?! */
diff --git a/networking/tftp.c b/networking/tftp.c
index ac3a86afb..59f53ae4a 100644
--- a/networking/tftp.c
+++ b/networking/tftp.c
@@ -225,7 +225,7 @@ static int tftp( USE_GETPUT(const int cmd,)
225 /* Receive packet */ 225 /* Receive packet */
226 /*pfd[0].fd = socketfd;*/ 226 /*pfd[0].fd = socketfd;*/
227 pfd[0].events = POLLIN; 227 pfd[0].events = POLLIN;
228 switch (poll(pfd, 1, waittime_ms)) { 228 switch (safe_poll(pfd, 1, waittime_ms)) {
229 unsigned from_port; 229 unsigned from_port;
230 case 1: 230 case 1:
231 from->len = peer_lsa->len; 231 from->len = peer_lsa->len;
@@ -262,7 +262,7 @@ static int tftp( USE_GETPUT(const int cmd,)
262 262
263 goto send_again; /* resend last sent pkt */ 263 goto send_again; /* resend last sent pkt */
264 default: 264 default:
265 bb_perror_msg("poll"); 265 /*bb_perror_msg("poll"); - done in safe_poll */
266 goto ret; 266 goto ret;
267 } 267 }
268 process_pkt: 268 process_pkt:
diff --git a/networking/traceroute.c b/networking/traceroute.c
index 21921e56d..2d09c7197 100644
--- a/networking/traceroute.c
+++ b/networking/traceroute.c
@@ -543,7 +543,7 @@ wait_for_reply(int sock, struct sockaddr_in *fromp)
543 543
544 pfd[0].fd = sock; 544 pfd[0].fd = sock;
545 pfd[0].events = POLLIN; 545 pfd[0].events = POLLIN;
546 if (poll(pfd, 1, waittime * 1000) > 0) 546 if (safe_poll(pfd, 1, waittime * 1000) > 0)
547 cc = recvfrom(sock, packet, sizeof(packet), 0, 547 cc = recvfrom(sock, packet, sizeof(packet), 0,
548 (struct sockaddr *)fromp, &fromlen); 548 (struct sockaddr *)fromp, &fromlen);
549 return cc; 549 return cc;
diff --git a/networking/udhcp/arpping.c b/networking/udhcp/arpping.c
index 33518077b..7b702d8f3 100644
--- a/networking/udhcp/arpping.c
+++ b/networking/udhcp/arpping.c
@@ -81,12 +81,9 @@ int arpping(uint32_t test_ip, uint32_t from_ip, uint8_t *from_mac, const char *i
81 unsigned prevTime = monotonic_us(); 81 unsigned prevTime = monotonic_us();
82 82
83 pfd[0].events = POLLIN; 83 pfd[0].events = POLLIN;
84 r = poll(pfd, 1, timeout_ms); 84 r = safe_poll(pfd, 1, timeout_ms);
85 if (r < 0) { 85 if (r < 0) {
86 if (errno != EINTR) { 86 break;
87 bb_perror_msg("poll");
88 break;
89 }
90 } else if (r) { 87 } else if (r) {
91 if (read(s, &arp, sizeof(arp)) < 0) 88 if (read(s, &arp, sizeof(arp)) < 0)
92 break; 89 break;
diff --git a/networking/zcip.c b/networking/zcip.c
index 2f0b5a7fb..63846ebef 100644
--- a/networking/zcip.c
+++ b/networking/zcip.c
@@ -300,7 +300,12 @@ int zcip_main(int argc, char **argv)
300 300
301 VDBG("...wait %d %s nprobes=%u, nclaims=%u\n", 301 VDBG("...wait %d %s nprobes=%u, nclaims=%u\n",
302 timeout_ms, intf, nprobes, nclaims); 302 timeout_ms, intf, nprobes, nclaims);
303 switch (poll(fds, 1, timeout_ms)) { 303
304 switch (safe_poll(fds, 1, timeout_ms)) {
305
306 default:
307 /*bb_perror_msg("poll"); - done in safe_poll */
308 return EXIT_FAILURE;
304 309
305 // timeout 310 // timeout
306 case 0: 311 case 0:
@@ -388,6 +393,7 @@ int zcip_main(int argc, char **argv)
388 break; 393 break;
389 } // switch (state) 394 } // switch (state)
390 break; // case 0 (timeout) 395 break; // case 0 (timeout)
396
391 // packets arriving 397 // packets arriving
392 case 1: 398 case 1:
393 // We need to adjust the timeout in case we didn't receive 399 // We need to adjust the timeout in case we didn't receive
@@ -519,13 +525,9 @@ int zcip_main(int argc, char **argv)
519 nclaims = 0; 525 nclaims = 0;
520 break; 526 break;
521 } // switch state 527 } // switch state
522
523 break; // case 1 (packets arriving) 528 break; // case 1 (packets arriving)
524 default:
525 why = "poll";
526 goto bad;
527 } // switch poll 529 } // switch poll
528 } 530 } // while (1)
529 bad: 531 bad:
530 bb_perror_msg("%s, %s", intf, why); 532 bb_perror_msg("%s, %s", intf, why);
531 return EXIT_FAILURE; 533 return EXIT_FAILURE;